Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed-os-example-ble-Advertising
Revision 219:d8e8cd4d4521, committed 2016-03-31
- Comitter:
- Andrea Palmieri
- Date:
- Thu Mar 31 11:16:47 2016 +0200
- Parent:
- 218:48776140c30d
- Child:
- 220:e02936f0d4c7
- Commit message:
- Implement APIs
- versionString get/set
- startRadioScan wrapper
- other minor change
Signed-off-by: Andrea Palmieri <andrea.palmieri@st.com>
Changed in this revision
| source/platform/btle.cpp | Show annotated file Show diff for this revision Revisions of this file |
| x-nucleo-idb0xa1/platform/btle.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/source/platform/btle.cpp Thu Mar 31 11:12:14 2016 +0200
+++ b/source/platform/btle.cpp Thu Mar 31 11:16:47 2016 +0200
@@ -74,16 +74,14 @@
void HCI_Input(tHciDataPacket * hciReadPacket);
-//#define BDADDR_SIZE 6
-//tHalUint8 bdaddr[BDADDR_SIZE]= {0xaa, 0x00, 0x00, 0xE1, 0x80, 0x02};
-
uint16_t g_gap_service_handle = 0;
uint16_t g_appearance_char_handle = 0;
uint16_t g_device_name_char_handle = 0;
/* Private variables ---------------------------------------------------------*/
volatile uint8_t set_connectable = 1;
-// ANDREA
+
+static char versionString[32];
uint8_t bnrg_expansion_board = IDB04A1; /* at startup, suppose the X-NUCLEO-IDB04A1 is used */
Gap::Address_t bleAddr;
@@ -99,9 +97,9 @@
@returns void
*/
/**************************************************************************/
-void btle_init(bool isSetAddress, uint8_t role)
+void btleInit(bool isSetAddress, uint8_t role)
{
- PRINTF("btle_init>>\n\r");
+ PRINTF("btleInit>>\n\r");
int ret;
uint8_t hwVersion;
@@ -133,8 +131,11 @@
bnrg_expansion_board = IDB05A1;
}
+ /* set BLE version string */
+ setVersionString(hwVersion, fwVersion);
+
/* The Nucleo board must be configured as SERVER */
- //check if isSetAddress is set than set address.
+ //check if isSetAddress is set then set address.
// ANDREA
if(isSetAddress)
{
@@ -161,7 +162,7 @@
PRINTF("GATT_Init failed.\n");
}
if (bnrg_expansion_board == IDB05A1) {
- ret = aci_gap_init_IDB05A1(GAP_PERIPHERAL_ROLE_IDB05A1|GAP_CENTRAL_ROLE_IDB05A1, 0, 0x07, &service_handle, &dev_name_char_handle, &appearance_char_handle);
+ ret = aci_gap_init_IDB05A1(GAP_PERIPHERAL_ROLE_IDB05A1|GAP_CENTRAL_ROLE_IDB05A1|GAP_OBSERVER_ROLE_IDB05A1, 0, 0x07, &service_handle, &dev_name_char_handle, &appearance_char_handle);
} else {
ret = aci_gap_init_IDB04A1(role, &service_handle, &dev_name_char_handle, &appearance_char_handle);
}
@@ -218,6 +219,45 @@
}
#endif
+/* set BLE Version string */
+void setVersionString(uint8_t hwVersion, uint16_t fwVersion)
+{
+ if(bnrg_expansion_board == IDB04A1 || bnrg_expansion_board == IDB05A1) {
+ snprintf(versionString, sizeof(versionString), "ST BLE4.1 HW v%u.%u FW v%u.%u",
+ hwVersion>>4, (hwVersion&0x0F),
+ fwVersion>>8, (fwVersion&0x00F0)>>4);
+ } else {
+ snprintf(versionString, sizeof(versionString), "ST (unknown spec)");
+ }
+}
+
+/* get BLE Version string */
+const char* getVersionString(void)
+{
+ return versionString;
+}
+
+tBleStatus btleStartRadioScan(uint8_t scan_type,
+ uint16_t scan_interval,
+ uint16_t scan_window,
+ uint8_t own_address_type)
+{
+ tBleStatus ret;
+
+ // Observer role is not supported by X-NUCLEO-IDB04A1, return BLE_ERROR_NOT_IMPLEMENTED
+ if(bnrg_expansion_board == IDB05A1) {
+ ret = aci_gap_start_observation_procedure(scan_interval,
+ scan_window,
+ scan_type,
+ own_address_type,
+ 1); // 1 to filter duplicates
+ } else {
+ ret = BLE_STATUS_INVALID_CID;
+ }
+
+ return ret;
+
+}
/*!
@brief Not Used
@@ -536,8 +576,7 @@
//printf("EVT_BLUE_GAP_PROCEDURE_COMPLETE (code=0x%02X)\n\r", pr->procedure_code);
switch(pr->procedure_code) {
- case GAP_LIMITED_DISCOVERY_PROC:
- case GAP_GENERAL_DISCOVERY_PROC:
+ case GAP_OBSERVATION_PROC_IDB05A1:
BlueNRGGap::getInstance().Discovery_CB(BlueNRGGap::DISCOVERY_COMPLETE, 0, NULL, NULL, NULL, NULL, NULL);
break;
--- a/x-nucleo-idb0xa1/platform/btle.h Thu Mar 31 11:12:14 2016 +0200 +++ b/x-nucleo-idb0xa1/platform/btle.h Thu Mar 31 11:16:47 2016 +0200 @@ -38,10 +38,16 @@ extern uint16_t g_appearance_char_handle; extern uint16_t g_device_name_char_handle; -void btle_init(bool isSetAddress, uint8_t role); +void btleInit(bool isSetAddress, uint8_t role); void SPI_Poll(void); void User_Process(void); void setConnectable(void); +void setVersionString(uint8_t hwVersion, uint16_t fwVersion); +const char* getVersionString(void); +tBleStatus btleStartRadioScan(uint8_t scan_type, + uint16_t scan_interval, + uint16_t scan_window, + uint8_t own_address_type); #ifdef AST_FOR_MBED_OS extern int btle_handler_pending;