This repository is for Bluetooth Asia 2018 developer training, peripheral session.
Fork of BluetoothAsiaPeripheral by
peripheral_src.txt
- Committer:
- krenbluetoothsig
- Date:
- 2018-05-07
- Revision:
- 7:243a19749fab
- Parent:
- 6:f296b217bb4c
File content as of revision 7:243a19749fab:
./microbit/microbit-dal/inc/bluetooth/MicroBitAnimationService.h // TODO: memory for our Animation characteristics. uint8_t animation_type_buffer[1]; uint8_t animation_status_buffer[1]; uint8_t animation_control_buffer[1]; ctrl+S then ctrl+B // TODO: handles on this service's characterisitics. GattAttribute::Handle_t animationTypeCharacteristicHandle; GattAttribute::Handle_t animationStatusCharacteristicHandle; GattAttribute::Handle_t animationControlCharacteristicHandle; ctrl+S then ctrl+B ./microbit/microbit-dal/source/bluetooth/MicroBitAnimationService.cpp // TODO: Three GattCharacteristic objects. UUID, valuePTR, length, max length, properties. GattCharacteristic animationTypeCharacteristic( MicroBitAnimationServiceAnimationTypeCharacteristicUUID, (uint8_t *)animation_type_buffer, 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE); GattCharacteristic animationStatusCharacteristic( MicroBitAnimationServiceAnimationStatusCharacteristicUUID, (uint8_t *)animation_status_buffer, 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); GattCharacteristic animationControlCharacteristic( MicroBitAnimationServiceAnimationControlCharacteristicUUID, (uint8_t *)animation_control_buffer, 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE); ctrl+S then ctrl+B // TODO: initialise characteristic value buffers. animation_type_buffer[0] = 0x00; animation_status_buffer[0] = 0x00; animation_control_buffer[0] = 0x00; ctrl+S then ctrl+B // TODO: create GattService containing the three characteristics // create an array of our characteristics so we can pass them to the service when we create it GattCharacteristic *characteristics[] = {&animationTypeCharacteristic, &animationStatusCharacteristic, &animationControlCharacteristic}; // create the animation service and specify its characteristics. 3rd arg is the number of characteristics. GattService service(MicroBitAnimationServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *)); ctrl+S then ctrl+B // TODO: add the service to the Bluetooth attribute table ble.addService(service); ctrl+S then ctrl+B // TODO: take a note of the handles of our new characteristics now that they're in the attribute table animationTypeCharacteristicHandle = animationTypeCharacteristic.getValueHandle(); animationStatusCharacteristicHandle = animationStatusCharacteristic.getValueHandle(); animationControlCharacteristicHandle = animationControlCharacteristic.getValueHandle(); ctrl+S then ctrl+B // TODO: register a callback function for when a characteristic is written to ble.onDataWritten(this, &MicroBitAnimationService::onDataWritten); ctrl+S then ctrl+B /** * Callback. Invoked when any of our attributes are written to */ void MicroBitAnimationService::onDataWritten(const GattWriteCallbackParams *params) { // TODO: handle write to animation type characteristic if (params->handle == animationTypeCharacteristicHandle && params->len == 1) { uint8_t *value = (uint8_t *)params->data; uint16_t event_value = static_cast<uint16_t>(value[0]); MicroBitEvent evt(ANIMATION_TYPE_EVENT, event_value); return; } // TODO: handle write to animation control characteristic if (params->handle == animationControlCharacteristicHandle && params->len == 1) { uint8_t *value = (uint8_t *)params->data; uint16_t event_value = static_cast<uint16_t>(value[0]); MicroBitEvent evt(ANIMATION_CONTROL_EVENT, event_value); return; } } ctrl+S then ctrl+B void MicroBitAnimationService::animationStatusUpdate(MicroBitEvent e) { // TODO: notify connected client of change to the animation status characteristic if (ble.getGapState().connected) { animation_status_buffer[0] = e.value; ble.gattServer().notify(animationStatusCharacteristicHandle,(uint8_t *)animation_status_buffer, 1); } } ctrl+S then ctrl+B