ver:init

Committer:
iv123
Date:
Sun Jun 18 16:11:03 2017 +0000
Revision:
0:4946262d6030
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
iv123 0:4946262d6030 1 /* mbed Microcontroller Library
iv123 0:4946262d6030 2 * Copyright (c) 2006-2013 ARM Limited
iv123 0:4946262d6030 3 *
iv123 0:4946262d6030 4 * Licensed under the Apache License, Version 2.0 (the "License");
iv123 0:4946262d6030 5 * you may not use this file except in compliance with the License.
iv123 0:4946262d6030 6 * You may obtain a copy of the License at
iv123 0:4946262d6030 7 *
iv123 0:4946262d6030 8 * http://www.apache.org/licenses/LICENSE-2.0
iv123 0:4946262d6030 9 *
iv123 0:4946262d6030 10 * Unless required by applicable law or agreed to in writing, software
iv123 0:4946262d6030 11 * distributed under the License is distributed on an "AS IS" BASIS,
iv123 0:4946262d6030 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
iv123 0:4946262d6030 13 * See the License for the specific language governing permissions and
iv123 0:4946262d6030 14 * limitations under the License.
iv123 0:4946262d6030 15 */
iv123 0:4946262d6030 16
iv123 0:4946262d6030 17 /**
iv123 0:4946262d6030 18 ******************************************************************************
iv123 0:4946262d6030 19 * @file BlueNRGGap.h
iv123 0:4946262d6030 20 * @author STMicroelectronics
iv123 0:4946262d6030 21 * @brief Header file for BlueNRG BLE_API Gap Class
iv123 0:4946262d6030 22 ******************************************************************************
iv123 0:4946262d6030 23 * @copy
iv123 0:4946262d6030 24 *
iv123 0:4946262d6030 25 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
iv123 0:4946262d6030 26 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
iv123 0:4946262d6030 27 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
iv123 0:4946262d6030 28 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
iv123 0:4946262d6030 29 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
iv123 0:4946262d6030 30 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
iv123 0:4946262d6030 31 *
iv123 0:4946262d6030 32 * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
iv123 0:4946262d6030 33 */
iv123 0:4946262d6030 34
iv123 0:4946262d6030 35 #ifndef __BLUENRG_GAP_H__
iv123 0:4946262d6030 36 #define __BLUENRG_GAP_H__
iv123 0:4946262d6030 37
iv123 0:4946262d6030 38 #ifdef YOTTA_CFG_MBED_OS
iv123 0:4946262d6030 39 #include "mbed-drivers/mbed.h"
iv123 0:4946262d6030 40 #else
iv123 0:4946262d6030 41 #include "mbed.h"
iv123 0:4946262d6030 42 #endif
iv123 0:4946262d6030 43 #include "ble/blecommon.h"
iv123 0:4946262d6030 44 #include "btle.h"
iv123 0:4946262d6030 45 #include "ble/GapAdvertisingParams.h"
iv123 0:4946262d6030 46 #include "ble/GapAdvertisingData.h"
iv123 0:4946262d6030 47 #include "ble/Gap.h"
iv123 0:4946262d6030 48
iv123 0:4946262d6030 49 #define BLE_CONN_HANDLE_INVALID 0x0
iv123 0:4946262d6030 50 #define BDADDR_SIZE 6
iv123 0:4946262d6030 51
iv123 0:4946262d6030 52 #define BLUENRG_GAP_ADV_INTERVAL_MIN (0x0020)
iv123 0:4946262d6030 53 #define BLUENRG_GAP_ADV_INTERVAL_MAX (0x4000)
iv123 0:4946262d6030 54 #define BLUENRG_GAP_ADV_NONCON_INTERVAL_MIN (0x00A0)
iv123 0:4946262d6030 55
iv123 0:4946262d6030 56 // Scanning and Connection Params used by Central for creating connection
iv123 0:4946262d6030 57 #define GAP_OBSERVATION_PROC (0x80)
iv123 0:4946262d6030 58
iv123 0:4946262d6030 59 #define SCAN_P (0x0010)
iv123 0:4946262d6030 60 #define SCAN_L (0x0010)
iv123 0:4946262d6030 61 #define SUPERV_TIMEOUT (0xC80)
iv123 0:4946262d6030 62 #define CONN_P(x) ((int)((x)/1.25f))
iv123 0:4946262d6030 63 #define CONN_L(x) ((int)((x)/0.625f))
iv123 0:4946262d6030 64 #define CONN_P1 ((int)(_advParams.getInterval()+5)/1.25f)//(0x4C)//(0x6C)
iv123 0:4946262d6030 65 #define CONN_P2 ((int)(_advParams.getInterval()+5)/1.25f)//(0x4C)//(0x6C)
iv123 0:4946262d6030 66 #define CONN_L1 (0x0008)
iv123 0:4946262d6030 67 #define CONN_L2 (0x0008)
iv123 0:4946262d6030 68 #define GUARD_INT 5 //msec
iv123 0:4946262d6030 69 #define MIN_INT_CONN 0x0006 //=>7.5msec
iv123 0:4946262d6030 70 #define MAX_INT_CONN 0x0C80 //=>4000msec
iv123 0:4946262d6030 71 #define DEF_INT_CONN 0x0140 //=>400msec (default value for connection interval)
iv123 0:4946262d6030 72
iv123 0:4946262d6030 73 /**************************************************************************/
iv123 0:4946262d6030 74 /*!
iv123 0:4946262d6030 75 \brief
iv123 0:4946262d6030 76
iv123 0:4946262d6030 77 */
iv123 0:4946262d6030 78 /**************************************************************************/
iv123 0:4946262d6030 79 class BlueNRGGap : public Gap
iv123 0:4946262d6030 80 {
iv123 0:4946262d6030 81 public:
iv123 0:4946262d6030 82 static BlueNRGGap &getInstance() {
iv123 0:4946262d6030 83 static BlueNRGGap m_instance;
iv123 0:4946262d6030 84 return m_instance;
iv123 0:4946262d6030 85 }
iv123 0:4946262d6030 86
iv123 0:4946262d6030 87 enum Reason_t {
iv123 0:4946262d6030 88 DEVICE_FOUND,
iv123 0:4946262d6030 89 DISCOVERY_COMPLETE
iv123 0:4946262d6030 90 };
iv123 0:4946262d6030 91
iv123 0:4946262d6030 92 /* Functions that must be implemented from Gap */
iv123 0:4946262d6030 93 virtual ble_error_t setAddress(addr_type_t type, const BLEProtocol::AddressBytes_t address);
iv123 0:4946262d6030 94 virtual ble_error_t getAddress(BLEProtocol::AddressType_t *typeP, BLEProtocol::AddressBytes_t address);
iv123 0:4946262d6030 95 virtual ble_error_t setAdvertisingData(const GapAdvertisingData &, const GapAdvertisingData &);
iv123 0:4946262d6030 96 virtual ble_error_t startAdvertising(const GapAdvertisingParams &);
iv123 0:4946262d6030 97 virtual ble_error_t stopAdvertising(void);
iv123 0:4946262d6030 98 virtual ble_error_t stopScan();
iv123 0:4946262d6030 99 virtual uint16_t getMinAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_INTERVAL_MIN);}
iv123 0:4946262d6030 100 virtual uint16_t getMinNonConnectableAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_NONCON_INTERVAL_MIN);}
iv123 0:4946262d6030 101 virtual uint16_t getMaxAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_INTERVAL_MAX);}
iv123 0:4946262d6030 102 virtual ble_error_t disconnect(DisconnectionReason_t reason);
iv123 0:4946262d6030 103 virtual ble_error_t disconnect(Handle_t connectionHandle, DisconnectionReason_t reason);
iv123 0:4946262d6030 104 virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params);
iv123 0:4946262d6030 105 virtual ble_error_t setPreferredConnectionParams(const ConnectionParams_t *params);
iv123 0:4946262d6030 106 virtual ble_error_t updateConnectionParams(Handle_t handle, const ConnectionParams_t *params);
iv123 0:4946262d6030 107
iv123 0:4946262d6030 108 virtual ble_error_t setDeviceName(const uint8_t *deviceName);
iv123 0:4946262d6030 109 virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP);
iv123 0:4946262d6030 110 virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance);
iv123 0:4946262d6030 111 virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP);
iv123 0:4946262d6030 112
iv123 0:4946262d6030 113 virtual ble_error_t setScanningPolicyMode(ScanningPolicyMode_t mode);
iv123 0:4946262d6030 114 virtual ble_error_t setAdvertisingPolicyMode(AdvertisingPolicyMode_t mode);
iv123 0:4946262d6030 115 virtual AdvertisingPolicyMode_t getAdvertisingPolicyMode(void) const;
iv123 0:4946262d6030 116 virtual ScanningPolicyMode_t getScanningPolicyMode(void) const;
iv123 0:4946262d6030 117
iv123 0:4946262d6030 118 virtual ble_error_t setTxPower(int8_t txPower);
iv123 0:4946262d6030 119 virtual void getPermittedTxPowerValues(const int8_t **, size_t *);
iv123 0:4946262d6030 120
iv123 0:4946262d6030 121 virtual ble_error_t connect(const Address_t peerAddr,
iv123 0:4946262d6030 122 Gap::AddressType_t peerAddrType,
iv123 0:4946262d6030 123 const ConnectionParams_t *connectionParams,
iv123 0:4946262d6030 124 const GapScanningParams *scanParams);
iv123 0:4946262d6030 125
iv123 0:4946262d6030 126 virtual ble_error_t reset(void);
iv123 0:4946262d6030 127
iv123 0:4946262d6030 128 void Discovery_CB(Reason_t reason,
iv123 0:4946262d6030 129 uint8_t adv_type,
iv123 0:4946262d6030 130 uint8_t addr_type,
iv123 0:4946262d6030 131 uint8_t *addr,
iv123 0:4946262d6030 132 uint8_t *data_length,
iv123 0:4946262d6030 133 uint8_t *data,
iv123 0:4946262d6030 134 uint8_t *RSSI);
iv123 0:4946262d6030 135 ble_error_t createConnection(void);
iv123 0:4946262d6030 136
iv123 0:4946262d6030 137 void setConnectionHandle(uint16_t con_handle);
iv123 0:4946262d6030 138 uint16_t getConnectionHandle(void);
iv123 0:4946262d6030 139
iv123 0:4946262d6030 140 bool getIsSetAddress();
iv123 0:4946262d6030 141
iv123 0:4946262d6030 142 Timeout getAdvTimeout(void) const {
iv123 0:4946262d6030 143 return advTimeout;
iv123 0:4946262d6030 144 }
iv123 0:4946262d6030 145 uint8_t getAdvToFlag(void) {
iv123 0:4946262d6030 146 return AdvToFlag;
iv123 0:4946262d6030 147 }
iv123 0:4946262d6030 148 void setAdvToFlag(void);
iv123 0:4946262d6030 149
iv123 0:4946262d6030 150 void Process(void);
iv123 0:4946262d6030 151
iv123 0:4946262d6030 152 GapScanningParams* getScanningParams(void);
iv123 0:4946262d6030 153
iv123 0:4946262d6030 154 virtual ble_error_t startRadioScan(const GapScanningParams &scanningParams);
iv123 0:4946262d6030 155
iv123 0:4946262d6030 156 void setConnectionInterval(uint16_t interval);
iv123 0:4946262d6030 157 void setGapRole(Role_t role);
iv123 0:4946262d6030 158
iv123 0:4946262d6030 159 private:
iv123 0:4946262d6030 160 uint16_t m_connectionHandle;
iv123 0:4946262d6030 161 Role_t gapRole;
iv123 0:4946262d6030 162 AddressType_t addr_type;
iv123 0:4946262d6030 163 Address_t _peerAddr;
iv123 0:4946262d6030 164 AddressType_t _peerAddrType;
iv123 0:4946262d6030 165 uint8_t bdaddr[BDADDR_SIZE];
iv123 0:4946262d6030 166 bool _scanning;
iv123 0:4946262d6030 167 bool _connecting;
iv123 0:4946262d6030 168 bool isSetAddress;
iv123 0:4946262d6030 169 uint8_t deviceAppearance[2];
iv123 0:4946262d6030 170
iv123 0:4946262d6030 171 Timeout advTimeout;
iv123 0:4946262d6030 172 bool AdvToFlag;
iv123 0:4946262d6030 173
iv123 0:4946262d6030 174 static uint16_t SCAN_DURATION_UNITS_TO_MSEC(uint16_t duration) {
iv123 0:4946262d6030 175 return (duration * 625) / 1000;
iv123 0:4946262d6030 176 }
iv123 0:4946262d6030 177
iv123 0:4946262d6030 178 uint16_t scanInterval;
iv123 0:4946262d6030 179 uint16_t scanWindow;
iv123 0:4946262d6030 180 uint16_t advInterval;
iv123 0:4946262d6030 181 uint16_t slaveConnIntervMin;
iv123 0:4946262d6030 182 uint16_t slaveConnIntervMax;
iv123 0:4946262d6030 183 uint16_t conn_min_interval;
iv123 0:4946262d6030 184 uint16_t conn_max_interval;
iv123 0:4946262d6030 185 void setAdvParameters(void);
iv123 0:4946262d6030 186 void setConnectionParameters(void);
iv123 0:4946262d6030 187
iv123 0:4946262d6030 188 Gap::AdvertisingPolicyMode_t advertisingPolicyMode;
iv123 0:4946262d6030 189 Gap::ScanningPolicyMode_t scanningPolicyMode;
iv123 0:4946262d6030 190
iv123 0:4946262d6030 191 Whitelist_t whitelistAddresses;
iv123 0:4946262d6030 192
iv123 0:4946262d6030 193 ble_error_t updateAdvertisingData(void);
iv123 0:4946262d6030 194
iv123 0:4946262d6030 195 BlueNRGGap() {
iv123 0:4946262d6030 196 m_connectionHandle = BLE_CONN_HANDLE_INVALID;
iv123 0:4946262d6030 197 addr_type = BLEProtocol::AddressType::RANDOM_STATIC;
iv123 0:4946262d6030 198
iv123 0:4946262d6030 199 /* Set the whitelist policy filter modes to IGNORE_WHITELIST */
iv123 0:4946262d6030 200 advertisingPolicyMode = Gap::ADV_POLICY_IGNORE_WHITELIST;
iv123 0:4946262d6030 201 scanningPolicyMode = Gap::SCAN_POLICY_IGNORE_WHITELIST;
iv123 0:4946262d6030 202
iv123 0:4946262d6030 203 isSetAddress = false;
iv123 0:4946262d6030 204 memset(deviceAppearance, 0, sizeof(deviceAppearance));
iv123 0:4946262d6030 205 }
iv123 0:4946262d6030 206
iv123 0:4946262d6030 207 BlueNRGGap(BlueNRGGap const &);
iv123 0:4946262d6030 208 void operator=(BlueNRGGap const &);
iv123 0:4946262d6030 209
iv123 0:4946262d6030 210 GapAdvertisingData _advData;
iv123 0:4946262d6030 211 GapAdvertisingData _scanResponse;
iv123 0:4946262d6030 212 };
iv123 0:4946262d6030 213
iv123 0:4946262d6030 214 #endif // ifndef __BLUENRG_GAP_H__