This repository will be used for Bluetooth World 2018.

Dependencies:   microbit

Fork of BluetoothAsia2018Peripheral by Kai Ren

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?

UserRevisionLine numberNew 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