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