This repository will be used for Bluetooth World 2018.
Fork of BluetoothAsia2018Peripheral by
peripheral_src.txt@14:fcab3952e945, 2018-08-06 (annotated)
- Committer:
- krenbluetoothsig
- Date:
- Mon Aug 06 08:26:38 2018 +0000
- Revision:
- 14:fcab3952e945
- Parent:
- 13:f55fa8ef1591
1. NEW: just update "microbit" and folked it.
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 |