test1
Diff: x-nucleo-idb0xa1/BlueNRGGap.h
- Revision:
- 242:058b2e731adc
- Parent:
- 212:8b5ff0f0186f
- Parent:
- 238:b6454c839f42
- Child:
- 252:0c2cb16a7166
--- a/x-nucleo-idb0xa1/BlueNRGGap.h Fri Mar 18 12:10:20 2016 +0100 +++ b/x-nucleo-idb0xa1/BlueNRGGap.h Mon Jun 20 14:59:06 2016 +0200 @@ -45,25 +45,29 @@ #define BLE_CONN_HANDLE_INVALID 0x0 #define BDADDR_SIZE 6 -#define BLUENRG_GAP_ADV_INTERVAL_MIN (0) -#define BLUENRG_GAP_ADV_INTERVAL_MAX (0) -#define BLE_GAP_ADV_NONCON_INTERVAL_MIN (0) +#define BLUENRG_GAP_ADV_INTERVAL_MIN (0x0020) +#define BLUENRG_GAP_ADV_INTERVAL_MAX (0x4000) +#define BLUENRG_GAP_ADV_NONCON_INTERVAL_MIN (0x00A0) // Scanning and Connection Params used by Central for creating connection -#define LIMITED_DISCOVERY_PROCEDURE 0x01 -#define GENERAL_DISCOVERY_PROCEDURE 0x02 +#define GAP_OBSERVATION_PROC (0x80) -#define SCAN_P (0x4000) -#define SCAN_L (0x4000) -#define SUPERV_TIMEOUT (600) +#define SCAN_P (0x0010) +#define SCAN_L (0x0010) +#define SUPERV_TIMEOUT (0xC80) #define CONN_P(x) ((int)((x)/1.25f)) #define CONN_L(x) ((int)((x)/0.625f)) -#define CONN_P1 (CONN_P(50))//(CONN_P(1000)) -#define CONN_P2 (CONN_P(50))//(CONN_P(1000)) -#define CONN_L1 (CONN_L(5)) -#define CONN_L2 (CONN_L(5)) +#define CONN_P1 ((int)(_advParams.getInterval()+5)/1.25f)//(0x4C)//(0x6C) +#define CONN_P2 ((int)(_advParams.getInterval()+5)/1.25f)//(0x4C)//(0x6C) +#define CONN_L1 (0x0008) +#define CONN_L2 (0x0008) +#define GUARD_INT 5 //msec +#define MIN_INT_CONN 0x0006 //=>7.5msec +#define MAX_INT_CONN 0x0C80 //=>4000msec +#define DEF_INT_CONN 0x0140 //=>400msec (default value for connection interval) -#define UUID_BUFFER_SIZE 17 //Either 8*2(16-bit UUIDs) or 4*4(32-bit UUIDs) or 1*16(128-bit UUIDs) +1 +#define LOCAL_NAME_MAX_SIZE 9 //8 + 1(AD_DATA_TYPE) +#define UUID_BUFFER_SIZE 17 //Either 8*2(16-bit UUIDs) or 4*4(32-bit UUIDs) or 1*16(128-bit UUIDs) +1(AD_DATA_TYPE) #define ADV_DATA_MAX_SIZE 31 /**************************************************************************/ @@ -80,15 +84,6 @@ return m_instance; } - // <<<ANDREA>>> - /* - enum AdvType_t { - ADV_IND = GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED,//Gap::ADV_IND, - ADV_DIRECT_IND = GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED,//Gap::ADV_DIRECT_IND, - ADV_SCAN_IND = GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED,//Gap::ADV_SCAN_IND, - ADV_NONCONN_IND = GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED//Gap::ADV_NONCONN_IND - }; - */ enum Reason_t { DEVICE_FOUND, DISCOVERY_COMPLETE @@ -101,9 +96,9 @@ virtual ble_error_t startAdvertising(const GapAdvertisingParams &); virtual ble_error_t stopAdvertising(void); virtual ble_error_t stopScan(); - virtual uint16_t getMinAdvertisingInterval(void) const; - virtual uint16_t getMinNonConnectableAdvertisingInterval(void) const; - virtual uint16_t getMaxAdvertisingInterval(void) const; + virtual uint16_t getMinAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_INTERVAL_MIN);} + virtual uint16_t getMinNonConnectableAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_NONCON_INTERVAL_MIN);} + virtual uint16_t getMaxAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_INTERVAL_MAX);} virtual ble_error_t disconnect(DisconnectionReason_t reason); virtual ble_error_t disconnect(Handle_t connectionHandle, DisconnectionReason_t reason); virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params); @@ -114,19 +109,25 @@ virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP); virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance); virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP); - + + virtual ble_error_t setScanningPolicyMode(ScanningPolicyMode_t mode); + virtual ble_error_t setAdvertisingPolicyMode(AdvertisingPolicyMode_t mode); + virtual AdvertisingPolicyMode_t getAdvertisingPolicyMode(void) const; + virtual ScanningPolicyMode_t getScanningPolicyMode(void) const; + virtual ble_error_t setTxPower(int8_t txPower); virtual void getPermittedTxPowerValues(const int8_t **, size_t *); - // <<<ANDREA>>> + virtual ble_error_t connect(const Address_t peerAddr, Gap::AddressType_t peerAddrType, const ConnectionParams_t *connectionParams, const GapScanningParams *scanParams); - + + virtual ble_error_t reset(void); void Discovery_CB(Reason_t reason, uint8_t adv_type, - uint8_t *addr_type, + uint8_t addr_type, uint8_t *addr, uint8_t *data_length, uint8_t *data, @@ -156,16 +157,15 @@ uint16_t m_connectionHandle; AddressType_t addr_type; Address_t _peerAddr; + AddressType_t _peerAddrType; uint8_t bdaddr[BDADDR_SIZE]; bool _scanning; bool _connecting; bool isSetAddress; - bool btle_reinited; - uint8_t *DeviceName; uint8_t deviceAppearance[2]; - uint8_t *local_name; uint8_t local_name_length; + uint8_t local_name[LOCAL_NAME_MAX_SIZE]; uint8_t servUuidlength; uint8_t servUuidData[UUID_BUFFER_SIZE]; @@ -176,12 +176,38 @@ Timeout advTimeout; bool AdvToFlag; + const uint8_t *scan_response_payload; + uint8_t scan_rsp_length; + + static uint16_t SCAN_DURATION_UNITS_TO_MSEC(uint16_t duration) { + return (duration * 625) / 1000; + } + + uint16_t scanInterval; + uint16_t scanWindow; + uint16_t advInterval; + uint16_t conn_min_interval; + uint16_t conn_max_interval; + void setAdvParameters(void); + void setConnectionParameters(void); + + Gap::AdvertisingPolicyMode_t advertisingPolicyMode; + Gap::ScanningPolicyMode_t scanningPolicyMode; + + Whitelist_t whitelistAddresses; + + ble_error_t updateAdvertisingData(void); + BlueNRGGap() { m_connectionHandle = BLE_CONN_HANDLE_INVALID; - addr_type = BLEProtocol::AddressType::PUBLIC; + addr_type = BLEProtocol::AddressType::RANDOM_STATIC; + + /* Set the whitelist policy filter modes to IGNORE_WHITELIST */ + advertisingPolicyMode = Gap::ADV_POLICY_IGNORE_WHITELIST; + scanningPolicyMode = Gap::SCAN_POLICY_IGNORE_WHITELIST; + isSetAddress = false; - btle_reinited = false; - DeviceName = NULL; + memset(deviceAppearance, 0, sizeof(deviceAppearance)); } BlueNRGGap(BlueNRGGap const &);