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.
Fork of BluetoothAsia2018Peripheral by
peripheral_src.txt@13:f55fa8ef1591, 2018-08-02 (annotated)
- Committer:
- krenbluetoothsig
- Date:
- Thu Aug 02 04:09:01 2018 +0000
- Revision:
- 13:f55fa8ef1591
- Parent:
- 12:085fd7fe163b
1. NEW: add "DIRECTORY" mark, users can find the file easily.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| krenbluetoothsig | 13:f55fa8ef1591 | 1 | //DIRECTORY: ./microbit/microbit-dal/inc/bluetooth/MicroBitAnimationService.h |
| krenbluetoothsig | 12:085fd7fe163b | 2 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 3 | // TODO: memory for our Animation characteristics. |
| krenbluetoothsig | 5:e778ea479b18 | 4 | uint8_t animation_type_buffer[1]; |
| krenbluetoothsig | 5:e778ea479b18 | 5 | uint8_t animation_status_buffer[1]; |
| krenbluetoothsig | 5:e778ea479b18 | 6 | uint8_t animation_control_buffer[1]; |
| krenbluetoothsig | 12:085fd7fe163b | 7 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 8 | |
| krenbluetoothsig | 12:085fd7fe163b | 9 | |
| krenbluetoothsig | 12:085fd7fe163b | 10 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 11 | // TODO: handles on this service's characterisitics. |
| krenbluetoothsig | 5:e778ea479b18 | 12 | GattAttribute::Handle_t animationTypeCharacteristicHandle; |
| krenbluetoothsig | 5:e778ea479b18 | 13 | GattAttribute::Handle_t animationStatusCharacteristicHandle; |
| krenbluetoothsig | 5:e778ea479b18 | 14 | GattAttribute::Handle_t animationControlCharacteristicHandle; |
| krenbluetoothsig | 12:085fd7fe163b | 15 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 16 | |
| krenbluetoothsig | 5:e778ea479b18 | 17 | |
| krenbluetoothsig | 13:f55fa8ef1591 | 18 | //DIRECTORY: ./microbit/microbit-dal/source/bluetooth/MicroBitAnimationService.cpp |
| krenbluetoothsig | 12:085fd7fe163b | 19 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 20 | // TODO: Three GattCharacteristic objects. UUID, valuePTR, length, max length, properties. |
| krenbluetoothsig | 5:e778ea479b18 | 21 | GattCharacteristic animationTypeCharacteristic( |
| krenbluetoothsig | 5:e778ea479b18 | 22 | MicroBitAnimationServiceAnimationTypeCharacteristicUUID, |
| krenbluetoothsig | 5:e778ea479b18 | 23 | (uint8_t *)animation_type_buffer, |
| krenbluetoothsig | 5:e778ea479b18 | 24 | 1, |
| krenbluetoothsig | 5:e778ea479b18 | 25 | 1, |
| krenbluetoothsig | 5:e778ea479b18 | 26 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE); |
| krenbluetoothsig | 5:e778ea479b18 | 27 | |
| krenbluetoothsig | 5:e778ea479b18 | 28 | GattCharacteristic animationStatusCharacteristic( |
| krenbluetoothsig | 5:e778ea479b18 | 29 | MicroBitAnimationServiceAnimationStatusCharacteristicUUID, |
| krenbluetoothsig | 5:e778ea479b18 | 30 | (uint8_t *)animation_status_buffer, |
| krenbluetoothsig | 5:e778ea479b18 | 31 | 1, |
| krenbluetoothsig | 5:e778ea479b18 | 32 | 1, |
| krenbluetoothsig | 5:e778ea479b18 | 33 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); |
| krenbluetoothsig | 5:e778ea479b18 | 34 | |
| krenbluetoothsig | 5:e778ea479b18 | 35 | GattCharacteristic animationControlCharacteristic( |
| krenbluetoothsig | 5:e778ea479b18 | 36 | MicroBitAnimationServiceAnimationControlCharacteristicUUID, |
| krenbluetoothsig | 5:e778ea479b18 | 37 | (uint8_t *)animation_control_buffer, |
| krenbluetoothsig | 5:e778ea479b18 | 38 | 1, |
| krenbluetoothsig | 5:e778ea479b18 | 39 | 1, |
| krenbluetoothsig | 5:e778ea479b18 | 40 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE); |
| krenbluetoothsig | 12:085fd7fe163b | 41 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 42 | |
| krenbluetoothsig | 12:085fd7fe163b | 43 | |
| krenbluetoothsig | 12:085fd7fe163b | 44 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 45 | // TODO: initialise characteristic value buffers. |
| krenbluetoothsig | 5:e778ea479b18 | 46 | animation_type_buffer[0] = 0x00; |
| krenbluetoothsig | 5:e778ea479b18 | 47 | animation_status_buffer[0] = 0x00; |
| krenbluetoothsig | 5:e778ea479b18 | 48 | animation_control_buffer[0] = 0x00; |
| krenbluetoothsig | 12:085fd7fe163b | 49 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 50 | |
| krenbluetoothsig | 12:085fd7fe163b | 51 | |
| krenbluetoothsig | 12:085fd7fe163b | 52 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 53 | // TODO: create GattService containing the three characteristics |
| krenbluetoothsig | 5:e778ea479b18 | 54 | // create an array of our characteristics so we can pass them to the service when we create it |
| krenbluetoothsig | 5:e778ea479b18 | 55 | GattCharacteristic *characteristics[] = {&animationTypeCharacteristic, &animationStatusCharacteristic, &animationControlCharacteristic}; |
| krenbluetoothsig | 12:085fd7fe163b | 56 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 57 | |
| krenbluetoothsig | 12:085fd7fe163b | 58 | |
| krenbluetoothsig | 12:085fd7fe163b | 59 | //**@code **********************// |
| krenbluetoothsig | 10:bdd5a54dd4ce | 60 | // TODO: create the animation service and specify its characteristics |
| krenbluetoothsig | 5:e778ea479b18 | 61 | GattService service(MicroBitAnimationServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *)); |
| krenbluetoothsig | 12:085fd7fe163b | 62 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 63 | |
| krenbluetoothsig | 12:085fd7fe163b | 64 | |
| krenbluetoothsig | 12:085fd7fe163b | 65 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 66 | // TODO: add the service to the Bluetooth attribute table |
| krenbluetoothsig | 5:e778ea479b18 | 67 | ble.addService(service); |
| krenbluetoothsig | 12:085fd7fe163b | 68 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 69 | |
| krenbluetoothsig | 12:085fd7fe163b | 70 | |
| krenbluetoothsig | 12:085fd7fe163b | 71 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 72 | // TODO: take a note of the handles of our new characteristics now that they're in the attribute table |
| krenbluetoothsig | 5:e778ea479b18 | 73 | animationTypeCharacteristicHandle = animationTypeCharacteristic.getValueHandle(); |
| krenbluetoothsig | 5:e778ea479b18 | 74 | animationStatusCharacteristicHandle = animationStatusCharacteristic.getValueHandle(); |
| krenbluetoothsig | 5:e778ea479b18 | 75 | animationControlCharacteristicHandle = animationControlCharacteristic.getValueHandle(); |
| krenbluetoothsig | 12:085fd7fe163b | 76 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 77 | |
| krenbluetoothsig | 12:085fd7fe163b | 78 | |
| krenbluetoothsig | 12:085fd7fe163b | 79 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 80 | // TODO: register a callback function for when a characteristic is written to |
| krenbluetoothsig | 5:e778ea479b18 | 81 | ble.onDataWritten(this, &MicroBitAnimationService::onDataWritten); |
| krenbluetoothsig | 12:085fd7fe163b | 82 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 83 | |
| krenbluetoothsig | 5:e778ea479b18 | 84 | /** |
| krenbluetoothsig | 5:e778ea479b18 | 85 | * Callback. Invoked when any of our attributes are written to |
| krenbluetoothsig | 5:e778ea479b18 | 86 | */ |
| krenbluetoothsig | 5:e778ea479b18 | 87 | void MicroBitAnimationService::onDataWritten(const GattWriteCallbackParams *params) |
| krenbluetoothsig | 5:e778ea479b18 | 88 | { |
| krenbluetoothsig | 12:085fd7fe163b | 89 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 90 | // TODO: handle write to animation type characteristic |
| krenbluetoothsig | 5:e778ea479b18 | 91 | if (params->handle == animationTypeCharacteristicHandle && params->len == 1) { |
| krenbluetoothsig | 5:e778ea479b18 | 92 | uint8_t *value = (uint8_t *)params->data; |
| krenbluetoothsig | 5:e778ea479b18 | 93 | uint16_t event_value = static_cast<uint16_t>(value[0]); |
| krenbluetoothsig | 5:e778ea479b18 | 94 | MicroBitEvent evt(ANIMATION_TYPE_EVENT, event_value); |
| krenbluetoothsig | 5:e778ea479b18 | 95 | return; |
| krenbluetoothsig | 5:e778ea479b18 | 96 | } |
| krenbluetoothsig | 12:085fd7fe163b | 97 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 98 | |
| krenbluetoothsig | 12:085fd7fe163b | 99 | |
| krenbluetoothsig | 12:085fd7fe163b | 100 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 101 | // TODO: handle write to animation control characteristic |
| krenbluetoothsig | 5:e778ea479b18 | 102 | if (params->handle == animationControlCharacteristicHandle && params->len == 1) { |
| krenbluetoothsig | 5:e778ea479b18 | 103 | uint8_t *value = (uint8_t *)params->data; |
| krenbluetoothsig | 5:e778ea479b18 | 104 | uint16_t event_value = static_cast<uint16_t>(value[0]); |
| krenbluetoothsig | 5:e778ea479b18 | 105 | MicroBitEvent evt(ANIMATION_CONTROL_EVENT, event_value); |
| krenbluetoothsig | 5:e778ea479b18 | 106 | return; |
| krenbluetoothsig | 5:e778ea479b18 | 107 | } |
| krenbluetoothsig | 12:085fd7fe163b | 108 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 109 | } |
| krenbluetoothsig | 5:e778ea479b18 | 110 | |
| krenbluetoothsig | 5:e778ea479b18 | 111 | void MicroBitAnimationService::animationStatusUpdate(MicroBitEvent e) |
| krenbluetoothsig | 5:e778ea479b18 | 112 | { |
| krenbluetoothsig | 12:085fd7fe163b | 113 | //**@code **********************// |
| krenbluetoothsig | 5:e778ea479b18 | 114 | // TODO: notify connected client of change to the animation status characteristic |
| krenbluetoothsig | 5:e778ea479b18 | 115 | if (ble.getGapState().connected) |
| krenbluetoothsig | 5:e778ea479b18 | 116 | { |
| krenbluetoothsig | 5:e778ea479b18 | 117 | animation_status_buffer[0] = e.value; |
| krenbluetoothsig | 5:e778ea479b18 | 118 | ble.gattServer().notify(animationStatusCharacteristicHandle,(uint8_t *)animation_status_buffer, 1); |
| krenbluetoothsig | 5:e778ea479b18 | 119 | } |
| krenbluetoothsig | 12:085fd7fe163b | 120 | //**@endcode *******************// |
| krenbluetoothsig | 5:e778ea479b18 | 121 | } |
| krenbluetoothsig | 12:085fd7fe163b | 122 |
