BLE_API wrapper library for STMicroelectronics' BlueNRG Bluetooth Low Energy expansion board shield (Component)
Dependents: Nucleo_Zumo_BLE_IDB04A1 contest_IOT5 contest_IOT6 contest_IOT_10 ... more
Fork of X_NUCLEO_IDB0XA1 by
Arduino Connector Compatibility Warning
X-NUCLEO-IDB04A1 and X-NUCLEO-IDB05A1 are Arduino compatible with an exception: instead of using pin D13
for the SPI clock, they use pin D3
.
The default configuration for this library is having the SPI clock on pin D3
.
To be fully Arduino compatible, X-NUCLEO-IDB04A1 and X-NUCLEO-IDB05A1 need a small HW patch.
For X-NUCLEO-IDB04A1 this patch consists in removing zero resistor R10
and instead soldering zero resistor R11
.
For X-NUCLEO-IDB05A1 this patch consists in removing zero resistor R4
and instead soldering zero resistor R6
.
In case you patch your board, then you also have to configure this library to use pin D13
to drive the SPI clock (see macro IDB0XA1_D13_PATCH
in file x_nucleo_idb0xa1_targets.h
).
If you use pin D13
for the SPI clock, please be aware that on STM32 Nucleo boards you may not drive the LED, otherwise you will get a conflict: the LED on STM32 Nucleo boards is connected to pin D13
.
Referring to the current list of tested platforms (see X-NUCLEO-IDB04A1 and X-NUCLEO-IDB05A1 pages), the patch is required by ST-Nucleo-F103RB; ST-Nucleo-F302R8; ST-Nucleo-F411RE; and ST-Nucleo-F446RE.
Diff: source/BlueNRGGap.cpp
- Revision:
- 160:174387d53809
- Parent:
- 158:1b92852cfb71
- Child:
- 162:667f97a4db7f
- Child:
- 181:749071129d2e
--- a/source/BlueNRGGap.cpp Wed Oct 28 14:43:57 2015 +0100 +++ b/source/BlueNRGGap.cpp Thu Oct 29 13:35:32 2015 +0100 @@ -972,6 +972,18 @@ return BLE_GAP_ADV_NONCON_INTERVAL_MIN; } +GapScanningParams* BlueNRGGap::getScanningParams(void) +{ + return &_scanningParams; +} + +static void radioScanning() +{ + GapScanningParams* scanningParams = BlueNRGGap::getInstance().getScanningParams(); + + BlueNRGGap::getInstance().startRadioScan(*scanningParams); +} + // ANDREA void BlueNRGGap::Discovery_CB(Reason_t reason, uint8_t adv_type, @@ -1011,6 +1023,7 @@ PRINTF("adv peerAddr[%02x %02x %02x %02x %02x %02x] \r\n", addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]); processAdvertisementReport(addr, *RSSI, isScanResponse, type, *data_length, data); + PRINTF("!!!After processAdvertisementReport\n\r"); } break; @@ -1021,15 +1034,12 @@ PRINTF("DISCOVERY_COMPLETE\n\r"); _scanning = false; - if(_connecting) { - // FIXME: We need to wait for a while before creating a connection - // due to BlueNRG process queue handling - Clock_Wait(100); - + if(_connecting) { makeConnection(); } else { PRINTF("re-startRadioScan\n\r"); - startRadioScan(_scanningParams); + //startRadioScan(_scanningParams); + minar::Scheduler::postCallback(radioScanning); } break; @@ -1060,7 +1070,7 @@ ) == ERR_COMMAND_DISALLOWED) { PRINTF("betzw: wait a bit ...\n\r"); - // FIXME: We need to wait for a while before creating a connection + // FIXME: We need to wait for a while before starting discovery proc // due to BlueNRG process queue handling // NOTE: this workaround causes a potential risk for an endless loop!!! Clock_Wait(100); @@ -1147,8 +1157,21 @@ Scan_Interval, Scan_Window, Peer_Address_Type, Peer_Address, Own_Address_Type, Conn_Interval_Min, Conn_Interval_Max, Conn_Latency, Supervision_Timeout, Conn_Len_Min, Conn_Len_Max */ - ret = aci_gap_create_connection(SCAN_P, SCAN_L, PUBLIC_ADDR, (unsigned char*)_peerAddr, PUBLIC_ADDR, CONN_P1, CONN_P2, 0, - SUPERV_TIMEOUT, CONN_L1 , CONN_L2); + while((ret = aci_gap_create_connection(SCAN_P, + SCAN_L, + PUBLIC_ADDR, + (unsigned char*)_peerAddr, + PUBLIC_ADDR, + CONN_P1, CONN_P2, 0, + SUPERV_TIMEOUT, CONN_L1 , CONN_L2) + ) == ERR_COMMAND_DISALLOWED) { + PRINTF("wait a bit ...\n\r"); + + // FIXME: We need to wait for a while before creating a connection + // due to BlueNRG process queue handling + // NOTE: this workaround causes a potential risk for an endless loop!!! + Clock_Wait(100); + } if (ret != BLE_STATUS_SUCCESS){