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: BLE_API BLE_HeartRate mbed nRF51822
Fork of BLE_HeartRate by
MicroBitAccelerometerService.cpp@77:d0c01a3d966f, 2015-11-30 (annotated)
- Committer:
- finneyj
- Date:
- Mon Nov 30 13:37:37 2015 +0000
- Revision:
- 77:d0c01a3d966f
Repro of BLE disconnect bug under pure mbed
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| finneyj | 77:d0c01a3d966f | 1 | /** |
| finneyj | 77:d0c01a3d966f | 2 | * Class definition for the custom MicroBit Accelerometer Service. |
| finneyj | 77:d0c01a3d966f | 3 | * Provides a BLE service to remotely read the state of the accelerometer, and configure its behaviour. |
| finneyj | 77:d0c01a3d966f | 4 | */ |
| finneyj | 77:d0c01a3d966f | 5 | |
| finneyj | 77:d0c01a3d966f | 6 | #include "mbed.h" |
| finneyj | 77:d0c01a3d966f | 7 | #include "ble/BLE.h" |
| finneyj | 77:d0c01a3d966f | 8 | #include "ble/UUID.h" |
| finneyj | 77:d0c01a3d966f | 9 | #include "MicroBitAccelerometerService.h" |
| finneyj | 77:d0c01a3d966f | 10 | |
| finneyj | 77:d0c01a3d966f | 11 | GattAttribute::Handle_t accelerometerDataCharacteristicHandleGlobal; |
| finneyj | 77:d0c01a3d966f | 12 | |
| finneyj | 77:d0c01a3d966f | 13 | /** |
| finneyj | 77:d0c01a3d966f | 14 | * Constructor. |
| finneyj | 77:d0c01a3d966f | 15 | * Create a representation of the AccelerometerService |
| finneyj | 77:d0c01a3d966f | 16 | * @param _ble The instance of a BLE device that we're running on. |
| finneyj | 77:d0c01a3d966f | 17 | */ |
| finneyj | 77:d0c01a3d966f | 18 | MicroBitAccelerometerService::MicroBitAccelerometerService(BLEDevice &_ble) : |
| finneyj | 77:d0c01a3d966f | 19 | ble(_ble) |
| finneyj | 77:d0c01a3d966f | 20 | { |
| finneyj | 77:d0c01a3d966f | 21 | // Create the data structures that represent each of our characteristics in Soft Device. |
| finneyj | 77:d0c01a3d966f | 22 | GattCharacteristic *accelerometerDataCharacteristic = new GattCharacteristic(MicroBitAccelerometerServiceDataUUID, (uint8_t *)accelerometerDataCharacteristicBuffer, 0, |
| finneyj | 77:d0c01a3d966f | 23 | sizeof(accelerometerDataCharacteristicBuffer), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); |
| finneyj | 77:d0c01a3d966f | 24 | |
| finneyj | 77:d0c01a3d966f | 25 | GattCharacteristic *accelerometerPeriodCharacteristic = new GattCharacteristic(MicroBitAccelerometerServicePeriodUUID, (uint8_t *)&accelerometerPeriodCharacteristicBuffer, 0, |
| finneyj | 77:d0c01a3d966f | 26 | sizeof(accelerometerPeriodCharacteristicBuffer), |
| finneyj | 77:d0c01a3d966f | 27 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE); |
| finneyj | 77:d0c01a3d966f | 28 | |
| finneyj | 77:d0c01a3d966f | 29 | // Initialise our characteristic values. |
| finneyj | 77:d0c01a3d966f | 30 | accelerometerDataCharacteristicBuffer[0] = 0; |
| finneyj | 77:d0c01a3d966f | 31 | accelerometerDataCharacteristicBuffer[1] = 0; |
| finneyj | 77:d0c01a3d966f | 32 | accelerometerDataCharacteristicBuffer[2] = 0; |
| finneyj | 77:d0c01a3d966f | 33 | accelerometerPeriodCharacteristicBuffer = 0; |
| finneyj | 77:d0c01a3d966f | 34 | |
| finneyj | 77:d0c01a3d966f | 35 | // Set default security requirements |
| finneyj | 77:d0c01a3d966f | 36 | accelerometerDataCharacteristic->requireSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM); |
| finneyj | 77:d0c01a3d966f | 37 | accelerometerPeriodCharacteristic->requireSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM); |
| finneyj | 77:d0c01a3d966f | 38 | |
| finneyj | 77:d0c01a3d966f | 39 | GattCharacteristic *characteristics[] = {accelerometerDataCharacteristic, accelerometerPeriodCharacteristic}; |
| finneyj | 77:d0c01a3d966f | 40 | GattService service(MicroBitAccelerometerServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *)); |
| finneyj | 77:d0c01a3d966f | 41 | |
| finneyj | 77:d0c01a3d966f | 42 | ble.addService(service); |
| finneyj | 77:d0c01a3d966f | 43 | |
| finneyj | 77:d0c01a3d966f | 44 | accelerometerDataCharacteristicHandle = accelerometerDataCharacteristic->getValueHandle(); |
| finneyj | 77:d0c01a3d966f | 45 | accelerometerDataCharacteristicHandleGlobal = accelerometerDataCharacteristic->getValueHandle(); |
| finneyj | 77:d0c01a3d966f | 46 | accelerometerPeriodCharacteristicHandle = accelerometerPeriodCharacteristic->getValueHandle(); |
| finneyj | 77:d0c01a3d966f | 47 | |
| finneyj | 77:d0c01a3d966f | 48 | ble.gattServer().write(accelerometerDataCharacteristicHandle,(uint8_t *)accelerometerDataCharacteristicBuffer, sizeof(accelerometerDataCharacteristicBuffer)); |
| finneyj | 77:d0c01a3d966f | 49 | ble.gattServer().write(accelerometerPeriodCharacteristicHandle, (const uint8_t *)&accelerometerPeriodCharacteristicBuffer, sizeof(accelerometerPeriodCharacteristicBuffer)); |
| finneyj | 77:d0c01a3d966f | 50 | |
| finneyj | 77:d0c01a3d966f | 51 | ble.onDataWritten(this, &MicroBitAccelerometerService::onDataWritten); |
| finneyj | 77:d0c01a3d966f | 52 | } |
| finneyj | 77:d0c01a3d966f | 53 | |
| finneyj | 77:d0c01a3d966f | 54 | /** |
| finneyj | 77:d0c01a3d966f | 55 | * Callback. Invoked when any of our attributes are written via BLE. |
| finneyj | 77:d0c01a3d966f | 56 | */ |
| finneyj | 77:d0c01a3d966f | 57 | void MicroBitAccelerometerService::onDataWritten(const GattWriteCallbackParams *params) |
| finneyj | 77:d0c01a3d966f | 58 | { |
| finneyj | 77:d0c01a3d966f | 59 | if (params->handle == accelerometerPeriodCharacteristicHandle && params->len >= sizeof(accelerometerPeriodCharacteristicBuffer)) |
| finneyj | 77:d0c01a3d966f | 60 | { |
| finneyj | 77:d0c01a3d966f | 61 | accelerometerPeriodCharacteristicBuffer = *((uint16_t *)params->data); |
| finneyj | 77:d0c01a3d966f | 62 | } |
| finneyj | 77:d0c01a3d966f | 63 | } |
| finneyj | 77:d0c01a3d966f | 64 | |
| finneyj | 77:d0c01a3d966f | 65 | const uint8_t MicroBitAccelerometerServiceUUID[] = { |
| finneyj | 77:d0c01a3d966f | 66 | 0xe9,0x5d,0x07,0x53,0x25,0x1d,0x47,0x0a,0xa0,0x62,0xfa,0x19,0x22,0xdf,0xa9,0xa8 |
| finneyj | 77:d0c01a3d966f | 67 | }; |
| finneyj | 77:d0c01a3d966f | 68 | |
| finneyj | 77:d0c01a3d966f | 69 | const uint8_t MicroBitAccelerometerServiceDataUUID[] = { |
| finneyj | 77:d0c01a3d966f | 70 | 0xe9,0x5d,0xca,0x4b,0x25,0x1d,0x47,0x0a,0xa0,0x62,0xfa,0x19,0x22,0xdf,0xa9,0xa8 |
| finneyj | 77:d0c01a3d966f | 71 | }; |
| finneyj | 77:d0c01a3d966f | 72 | |
| finneyj | 77:d0c01a3d966f | 73 | const uint8_t MicroBitAccelerometerServicePeriodUUID[] = { |
| finneyj | 77:d0c01a3d966f | 74 | 0xe9,0x5d,0xfb,0x24,0x25,0x1d,0x47,0x0a,0xa0,0x62,0xfa,0x19,0x22,0xdf,0xa9,0xa8 |
| finneyj | 77:d0c01a3d966f | 75 | }; |
| finneyj | 77:d0c01a3d966f | 76 |
