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 BluetoothAsiaPeripheral by
peripheral_src.txt
- Committer:
- krenbluetoothsig
- Date:
- 2018-04-20
- Revision:
- 6:f296b217bb4c
- Parent:
- 5:e778ea479b18
File content as of revision 6:f296b217bb4c:
./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