This repository is for Bluetooth Asia 2018 developer training, peripheral session.
Fork of BluetoothAsiaPeripheral by
peripheral_src.txt
- Committer:
- krenbluetoothsig
- Date:
- 2018-07-31
- Revision:
- 8:d3d0c0ac4ce9
- Parent:
- 6:f296b217bb4c
File content as of revision 8:d3d0c0ac4ce9:
./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
