BLE GATT-service implementation for high quantity sensor data from a MPU6050-accelerator/gyroscope

Dependencies:   BLE_API mbed nRF51822 MPU6050_lib

Committer:
fruediger
Date:
Tue Sep 22 10:50:59 2015 +0000
Revision:
13:496c0f5e8a61
Parent:
9:6a28d9c0e486
last commit before making this a public repository

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fruediger 9:6a28d9c0e486 1 #pragma once
fruediger 9:6a28d9c0e486 2 #ifndef __POWER_SERVICE_H__
fruediger 9:6a28d9c0e486 3 #define __POWER_SERVICE_H__
fruediger 9:6a28d9c0e486 4
fruediger 9:6a28d9c0e486 5 #include "BLE.h"
fruediger 9:6a28d9c0e486 6
fruediger 9:6a28d9c0e486 7 class PowerService
fruediger 9:6a28d9c0e486 8 {
fruediger 9:6a28d9c0e486 9 public:
fruediger 9:6a28d9c0e486 10 enum
fruediger 9:6a28d9c0e486 11 {
fruediger 9:6a28d9c0e486 12 UUID_POWER_SERVICE = 0xA300,
fruediger 9:6a28d9c0e486 13 UUID_POWER_VOLTAGE_CHAR = 0xA301,
fruediger 9:6a28d9c0e486 14 UUID_POWER_CURRENT_CHAR = 0xA302,
fruediger 9:6a28d9c0e486 15 UUID_POWER_DISCHARGE_CHAR = 0xA303
fruediger 9:6a28d9c0e486 16 };
fruediger 9:6a28d9c0e486 17
fruediger 9:6a28d9c0e486 18 PowerService
fruediger 9:6a28d9c0e486 19 (
fruediger 9:6a28d9c0e486 20 BLE &ble,
fruediger 9:6a28d9c0e486 21 float initialVoltage = 0.0f,
fruediger 9:6a28d9c0e486 22 float initialCurrent = 0.0f,
fruediger 9:6a28d9c0e486 23 float initialDischarge = 0.0f
fruediger 9:6a28d9c0e486 24 ) :
fruediger 9:6a28d9c0e486 25 gattServer(ble.gattServer()),
fruediger 9:6a28d9c0e486 26 voltageCharacteristic
fruediger 9:6a28d9c0e486 27 (
fruediger 9:6a28d9c0e486 28 UUID_POWER_VOLTAGE_CHAR,
fruediger 9:6a28d9c0e486 29 (float*)&initialVoltage,
fruediger 9:6a28d9c0e486 30 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY
fruediger 9:6a28d9c0e486 31 ),
fruediger 9:6a28d9c0e486 32 currentCharacteristic
fruediger 9:6a28d9c0e486 33 (
fruediger 9:6a28d9c0e486 34 UUID_POWER_CURRENT_CHAR,
fruediger 9:6a28d9c0e486 35 (float*)&initialCurrent,
fruediger 9:6a28d9c0e486 36 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY
fruediger 9:6a28d9c0e486 37 ),
fruediger 9:6a28d9c0e486 38 dischargeCharacteristic
fruediger 9:6a28d9c0e486 39 (
fruediger 9:6a28d9c0e486 40 UUID_POWER_DISCHARGE_CHAR,
fruediger 9:6a28d9c0e486 41 (float*)&initialDischarge,
fruediger 9:6a28d9c0e486 42 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY
fruediger 9:6a28d9c0e486 43 )
fruediger 9:6a28d9c0e486 44 {
fruediger 9:6a28d9c0e486 45 static bool serviceAdded = false;
fruediger 9:6a28d9c0e486 46 if (serviceAdded)
fruediger 9:6a28d9c0e486 47 return;
fruediger 9:6a28d9c0e486 48
fruediger 9:6a28d9c0e486 49 GattCharacteristic *charTable[] =
fruediger 9:6a28d9c0e486 50 {
fruediger 9:6a28d9c0e486 51 &voltageCharacteristic,
fruediger 9:6a28d9c0e486 52 &currentCharacteristic,
fruediger 9:6a28d9c0e486 53 &dischargeCharacteristic
fruediger 9:6a28d9c0e486 54 };
fruediger 9:6a28d9c0e486 55
fruediger 9:6a28d9c0e486 56 GattService powerService(UUID_POWER_SERVICE, charTable, sizeof(charTable) / sizeof(GattCharacteristic*));
fruediger 9:6a28d9c0e486 57
fruediger 9:6a28d9c0e486 58 gattServer.addService(powerService);
fruediger 9:6a28d9c0e486 59
fruediger 9:6a28d9c0e486 60 serviceAdded = true;
fruediger 9:6a28d9c0e486 61 }
fruediger 9:6a28d9c0e486 62
fruediger 9:6a28d9c0e486 63 void updateVoltage(float voltage)
fruediger 9:6a28d9c0e486 64 {
fruediger 9:6a28d9c0e486 65 gattServer.write(voltageCharacteristic.getValueHandle(), (uint8_t*)&voltage, sizeof(float));
fruediger 9:6a28d9c0e486 66 }
fruediger 9:6a28d9c0e486 67
fruediger 9:6a28d9c0e486 68 void updateCurrent(float current)
fruediger 9:6a28d9c0e486 69 {
fruediger 9:6a28d9c0e486 70 gattServer.write(currentCharacteristic.getValueHandle(), (uint8_t*)&current, sizeof(float));
fruediger 9:6a28d9c0e486 71 }
fruediger 9:6a28d9c0e486 72
fruediger 9:6a28d9c0e486 73 void updateDischarge(float discharge)
fruediger 9:6a28d9c0e486 74 {
fruediger 9:6a28d9c0e486 75 gattServer.write(dischargeCharacteristic.getValueHandle(), (uint8_t*)&discharge, sizeof(float));
fruediger 9:6a28d9c0e486 76 }
fruediger 9:6a28d9c0e486 77
fruediger 9:6a28d9c0e486 78 private:
fruediger 9:6a28d9c0e486 79 GattServer &gattServer;
fruediger 9:6a28d9c0e486 80 ReadOnlyGattCharacteristic<float> voltageCharacteristic;
fruediger 9:6a28d9c0e486 81 ReadOnlyGattCharacteristic<float> currentCharacteristic;
fruediger 9:6a28d9c0e486 82 ReadOnlyGattCharacteristic<float> dischargeCharacteristic;
fruediger 9:6a28d9c0e486 83 };
fruediger 9:6a28d9c0e486 84
fruediger 9:6a28d9c0e486 85 #endif