prova
Dependencies: BLE_API X_NUCLEO_IDB0XA1 X_NUCLEO_IKS01A2 mbed
Fork of BLE_HeartRate_IDB0XA1 by
Revision 22:07ff2f7adb16, committed 2017-09-19
- Comitter:
- andreasortino
- Date:
- Tue Sep 19 08:25:20 2017 +0000
- Parent:
- 21:0e7c08f5386f
- Commit message:
- yhjk
Changed in this revision
diff -r 0e7c08f5386f -r 07ff2f7adb16 X_NUCLEO_IDB0XA1.lib --- a/X_NUCLEO_IDB0XA1.lib Wed Oct 05 09:16:58 2016 +0000 +++ b/X_NUCLEO_IDB0XA1.lib Tue Sep 19 08:25:20 2017 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/teams/ST/code/X_NUCLEO_IDB0XA1/#fa98703ece8e +https://os.mbed.com/users/andreasortino/code/X_NUCLEO_IDB0XA1/#de76b6d90215
diff -r 0e7c08f5386f -r 07ff2f7adb16 X_NUCLEO_IKS01A2.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/X_NUCLEO_IKS01A2.lib Tue Sep 19 08:25:20 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST/code/X_NUCLEO_IKS01A2/#a8b764804890
diff -r 0e7c08f5386f -r 07ff2f7adb16 main.cpp --- a/main.cpp Wed Oct 05 09:16:58 2016 +0000 +++ b/main.cpp Tue Sep 19 08:25:20 2017 +0000 @@ -13,96 +13,109 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + #include "mbed.h" #include "ble/BLE.h" -#include "ble/services/HeartRateService.h" +#include "XNucleoIKS01A2.h" -DigitalOut led1(LED1, 1); +/* Instantiate the expansion board */ +static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5); -const static char DEVICE_NAME[] = "HRM1"; -static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE}; +/* Retrieve the composing elements of the expansion board */ +/* +static LSM303AGRMagSensor *magnetometer = mems_expansion_board->magnetometer; +static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor; +static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor; +static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro; +static LSM303AGRAccSensor *accelerometer = mems_expansion_board->accelerometer; + */ + uint8_t id=0; -static volatile bool triggerSensorPolling = false; +/* Optional: Device Name, add for human read-ability */ +const static char DEVICE_NAME[] = "myDevice"; +/* You have up to 26 bytes of advertising data to use. */ +const static uint8_t AdvData[] = {0x01,0x02,0x03,0x04,0x05}; /* Example of hex data */ +//const static uint8_t AdvData[] = {"ChangeThisData"}; /* Example of character data */ + +/* Optional: Restart advertising when peer disconnects */ void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { - (void)params; - BLE::Instance().gap().startAdvertising(); // restart advertising + BLE::Instance().gap().startAdvertising(); } - -void periodicCallback(void) -{ - led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ - /* Note that the periodicCallback() executes in interrupt context, so it is safer to do - * heavy-weight sensor polling from the main thread. */ - triggerSensorPolling = true; -} - +/** + * This function is called when the ble initialization process has failed + */ void onBleInitError(BLE &ble, ble_error_t error) { - (void)ble; - (void)error; - /* Initialization error handling should go here */ -} + /* Avoid compiler warnings */ + (void) ble; + (void) error; + + /* Initialization error handling should go here */ +} +/** + * Callback triggered when the ble initialization process has finished + */ void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { BLE& ble = params->ble; ble_error_t error = params->error; if (error != BLE_ERROR_NONE) { + /* In case of error, forward the error handling to onBleInitError */ onBleInitError(ble, error); return; } - if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { + /* Ensure that it is the default instance of BLE */ + if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { return; } + + /* Set device name characteristic data */ + ble.gap().setDeviceName((const uint8_t *) DEVICE_NAME); + /* Optional: add callback for disconnection */ ble.gap().onDisconnection(disconnectionCallback); - /* Setup primary service. */ - uint8_t hrmCounter = 60; // init HRM to 60bps - HeartRateService hrService(ble, hrmCounter, HeartRateService::LOCATION_FINGER); + /* Sacrifice 3B of 31B to Advertising Flags */ + ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE ); + ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); - /* Setup advertising. */ - ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); - ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); - ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR); - ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); - ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); - ble.gap().setAdvertisingInterval(1000); /* 1000ms */ - ble.gap().startAdvertising(); + /* Sacrifice 2B of 31B to AdvType overhead, rest goes to AdvData array you define */ + ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, AdvData, sizeof(AdvData)); + //ble.gattServer().write(Temperatura.getValueHandle(), id); - // infinite loop - while (true) { - // check for trigger from periodicCallback() - if (triggerSensorPolling && ble.getGapState().connected) { - triggerSensorPolling = false; - - // Do blocking calls or whatever is necessary for sensor polling. - // In our case, we simply update the HRM measurement. - hrmCounter++; + /* Optional: Add name to device */ + ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); - // 60 <= HRM bps <= 100 - if (hrmCounter == 100) { - hrmCounter = 60; - } + /* Set advertising interval. Longer interval == longer battery life */ + ble.gap().setAdvertisingInterval(100); /* 100ms */ - // update bps - hrService.updateHeartRate(hrmCounter); - } else { - ble.waitForEvent(); // low power wait for event - } - } + /* Start advertising */ + ble.gap().startAdvertising(); } int main(void) { - Ticker ticker; - ticker.attach(periodicCallback, 1); // blink LED every second + BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE); + /* hum_temp->enable(); + press_temp->enable(); + magnetometer->enable(); + accelerometer->enable(); + acc_gyro->enable_x(); + acc_gyro->enable_g();*/ + + //ReadOnlyGattCharacteristic<uint8_t> Temperatura; + /* Initialize BLE baselayer, always do this first! */ + ble.init(bleInitComplete); - BLE::Instance().init(bleInitComplete); + /* Infinite loop waiting for BLE events */ + while (true) { + /* Save power while waiting for callback events */ + ble.waitForEvent(); + } }