Dependencies:   mbed BLE_API nRF51822

Committer:
vilesovds
Date:
Thu Oct 22 09:08:15 2015 +0000
Revision:
2:ed001667a2b6
Parent:
1:0932324a41f7
Child:
3:38ec35b54db8
move to 128 bit UUID. Attempt to add Power Service

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suhamera 0:81f1818af032 1 #ifndef __BLE_SERVICE_POWER_H__
suhamera 0:81f1818af032 2 #define __BLE_SERVICE_POWER_H__
suhamera 0:81f1818af032 3
suhamera 0:81f1818af032 4 #include "BLE.h"
suhamera 0:81f1818af032 5 #include "PowerSwitch.h"
suhamera 0:81f1818af032 6 #include "Light.h"
suhamera 0:81f1818af032 7 #include "FlashStore.h"
suhamera 0:81f1818af032 8
vilesovds 2:ed001667a2b6 9 #define UUID_POWER(FIRST, SECOND) {\
vilesovds 2:ed001667a2b6 10 0xd4, 0x9f, FIRST, SECOND, 0xce,0xb2, 0x4c, 0x39, 0xa4, 0xea,\
vilesovds 2:ed001667a2b6 11 0x85, 0xfa, 0xfa, 0xae, 0x22, 0xbf\
vilesovds 2:ed001667a2b6 12 }
vilesovds 2:ed001667a2b6 13
vilesovds 2:ed001667a2b6 14 static const uint8_t UUID_power_service[] = UUID_POWER(0x20, 0x80);
vilesovds 2:ed001667a2b6 15 static const uint8_t UUID_power_value_char[] = UUID_POWER(0x20, 0x81);
vilesovds 2:ed001667a2b6 16 static const uint8_t UUID_power_state_char[] = UUID_POWER(0x20, 0x82);
vilesovds 2:ed001667a2b6 17
suhamera 0:81f1818af032 18 class ServicePower {
suhamera 0:81f1818af032 19
suhamera 0:81f1818af032 20 public:
suhamera 0:81f1818af032 21 ServicePower(BLE &_ble, Serial &_Serial, PowerSwitch &_Power, Light &_dayLight, FlashStore &_Store) :
suhamera 0:81f1818af032 22 ble(_ble),
vilesovds 1:0932324a41f7 23 Tserial(_Serial),
suhamera 0:81f1818af032 24 Power(_Power),
suhamera 0:81f1818af032 25 dayLight(_dayLight),
suhamera 0:81f1818af032 26 Store(_Store),
vilesovds 2:ed001667a2b6 27 valueCharacteristic(UUID_power_value_char, &powerValue, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
vilesovds 2:ed001667a2b6 28 stateCharacteristic(UUID_power_state_char, &powerState)
suhamera 0:81f1818af032 29 {
suhamera 0:81f1818af032 30 setupService();
suhamera 0:81f1818af032 31 }
suhamera 0:81f1818af032 32
suhamera 0:81f1818af032 33
suhamera 0:81f1818af032 34 virtual void onDataWritten(const GattWriteCallbackParams *params) {
suhamera 0:81f1818af032 35 if (params->handle == stateCharacteristic.getValueAttribute().getHandle() && (params->len == sizeof(powerState))) {
suhamera 0:81f1818af032 36 powerState = *(params->data);
suhamera 0:81f1818af032 37
suhamera 0:81f1818af032 38 powerState ? Power.doSwitch(true,2.0) : Power.doSwitch(false, 2.0);
suhamera 0:81f1818af032 39 Tserial.printf("Power: %s\n", powerState ? "on" : "off");
suhamera 0:81f1818af032 40
suhamera 0:81f1818af032 41 }
suhamera 0:81f1818af032 42 }
suhamera 0:81f1818af032 43
suhamera 0:81f1818af032 44 protected:
suhamera 0:81f1818af032 45 void setupService(void) {
suhamera 0:81f1818af032 46 GattCharacteristic *characteristics[] = {&stateCharacteristic, &valueCharacteristic};
vilesovds 2:ed001667a2b6 47 GattService powerService(UUID_power_service, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
suhamera 0:81f1818af032 48
suhamera 0:81f1818af032 49 powerState = false;
suhamera 0:81f1818af032 50 powerValue = 0.0;
suhamera 0:81f1818af032 51
suhamera 0:81f1818af032 52 ble.addService(powerService);
suhamera 0:81f1818af032 53 ble.onDataWritten(this, &ServicePower::onDataWritten);
suhamera 0:81f1818af032 54
suhamera 0:81f1818af032 55 updatePowerValue();
suhamera 0:81f1818af032 56 measurePeriod.attach(this, &ServicePower::updatePowerValue, 1.0);
suhamera 0:81f1818af032 57
suhamera 0:81f1818af032 58
suhamera 0:81f1818af032 59 }
suhamera 0:81f1818af032 60
suhamera 0:81f1818af032 61 void updatePowerValue(void) {
suhamera 0:81f1818af032 62
suhamera 0:81f1818af032 63 powerValue = dayLight.getLightValue();
suhamera 0:81f1818af032 64 ble.updateCharacteristicValue(valueCharacteristic.getValueAttribute().getHandle(), (uint8_t *)&powerValue, sizeof(powerValue));
suhamera 0:81f1818af032 65 Tserial.printf("updatePowerValue: %f \n", powerValue);
suhamera 0:81f1818af032 66
suhamera 0:81f1818af032 67 }
suhamera 0:81f1818af032 68
suhamera 0:81f1818af032 69
suhamera 0:81f1818af032 70 protected:
suhamera 0:81f1818af032 71 BLE &ble;
suhamera 0:81f1818af032 72 PowerSwitch &Power;
suhamera 0:81f1818af032 73 Light &dayLight;
suhamera 0:81f1818af032 74 FlashStore &Store;
suhamera 0:81f1818af032 75
suhamera 0:81f1818af032 76 Ticker measurePeriod;
suhamera 0:81f1818af032 77
suhamera 0:81f1818af032 78 bool powerState;
suhamera 0:81f1818af032 79 float powerValue;
suhamera 0:81f1818af032 80
suhamera 0:81f1818af032 81 ReadWriteGattCharacteristic<bool> stateCharacteristic;
suhamera 0:81f1818af032 82 ReadOnlyGattCharacteristic<float> valueCharacteristic;
suhamera 0:81f1818af032 83
suhamera 0:81f1818af032 84 Serial &Tserial; // tx, rx
suhamera 0:81f1818af032 85
suhamera 0:81f1818af032 86 };
suhamera 0:81f1818af032 87
suhamera 0:81f1818af032 88 #endif /* #ifndef __BLE_SERVICE_POWER_H__*/