![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Bluetooth Low Energy for Smart Plug
Dependencies: BLE_API mbed nRF51822
Services/SmartPlugService.h
- Committer:
- Slepnir
- Date:
- 2015-07-07
- Revision:
- 1:e036e77762fa
- Parent:
- 0:25ad6eba7916
- Child:
- 2:6db5c9a2894c
File content as of revision 1:e036e77762fa:
#ifndef SP_SERVICE_H #define SP_SERVICE_H #include "ble/BLE.h" #include "MVC.h" #include "mbed.h" #include "SmartPlugBLE.h" #define FULL_UUID(uuid_16) { \ 0x9B,0x3F,uuid_16>>16,uuid_16&0xFF,0x65,0x80,0x47,0x51, \ 0xB0,0x2F,0xA7,0xB5,0x19,0x4C,0x7F,0x23 \ } static const uint16_t SPS_UUID_SERVICE = 0x1522; static const uint16_t SPS_UUID_VOLTAGE_CHAR = 0x1523; static const uint16_t SPS_UUID_CURERNT_CHAR = 0x1524; static const uint16_t SPS_UUID_POWER_CHAR = 0x1525; static const uint16_t SPS_UUID_POWER_FACTOR_CHAR = 0x1526; static const uint16_t SPS_UUID_ENERGY_CHAR = 0x1527; static const uint16_t SPS_UUID_RELAY_CHAR = 0x1528; static const uint16_t SPS_UUID_UPDATE_CHAR = 0x1529; static const uint8_t SPS_UUID_SERVICE_FULL[] = FULL_UUID(SPS_UUID_SERVICE); static const uint8_t SPS_UUID_VOLTAGE_CHAR_FULL[] = FULL_UUID(SPS_UUID_VOLTAGE_CHAR); static const uint8_t SPS_UUID_CURERNT_CHAR_FULL[] = FULL_UUID(SPS_UUID_CURERNT_CHAR); static const uint8_t SPS_UUID_POWER_CHAR_FULL[] = FULL_UUID(SPS_UUID_POWER_CHAR); static const uint8_t SPS_UUID_POWER_FACTOR_CHAR_FULL[] = FULL_UUID(SPS_UUID_POWER_FACTOR_CHAR); static const uint8_t SPS_UUID_ENERGY_CHAR_FULL[] = FULL_UUID(SPS_UUID_ENERGY_CHAR); static const uint8_t SPS_UUID_RELAY_CHAR_FULL[] = FULL_UUID(SPS_UUID_RELAY_CHAR); static const uint8_t SPS_UUID_UPDATE_CHAR_FULL[] = FULL_UUID(SPS_UUID_UPDATE_CHAR); class SmartPlugService: public Observer { public: SmartPlugService(BLE &_ble, SmartPlugBLE &sys); void updateVoltage(unsigned long value); void updateCurrent(unsigned long value); void updatePower(unsigned long value); void updatePowerFactor(unsigned long value); void onDataWritten(const GattWriteCallbackParams *params); void update(void* data); void updateData(SmartPlug* data); void updateRelay(Relay* relay); void setupService(void); private: class RelayValueBytes { public: static const uint8_t MAX_SIZE_BYTES = 3; static const uint8_t STATE_INDEX = 0; static const uint8_t HOUR_TIMER_INDEX = 1; static const uint8_t MINUTE_TIMER_INDEX = 2; RelayValueBytes() { } void updateData(Relay* relay) { data[STATE_INDEX] = relay->getState(); data[HOUR_TIMER_INDEX] = relay->getHrCounter(); data[MINUTE_TIMER_INDEX] = relay->getMinCounter(); } uint8_t* getDataPointer() { return data; } uint8_t getLenBytes() { if(data[HOUR_TIMER_INDEX] == 0 && data[MINUTE_TIMER_INDEX] == 0) return 1; else return MAX_SIZE_BYTES; } private: uint8_t data[MAX_SIZE_BYTES]; }; BLE ble; unsigned long voltage; unsigned long current; unsigned long power; unsigned long powerFactor; unsigned long energy; RelayValueBytes relayValue; //uint8_t updateValue; SmartPlugBLE& system; ReadOnlyGattCharacteristic<unsigned long> voltageChar; ReadOnlyGattCharacteristic<unsigned long> currentChar; ReadOnlyGattCharacteristic<unsigned long> powerChar; ReadOnlyGattCharacteristic<unsigned long> powerFactorChar; ReadOnlyGattCharacteristic<unsigned long> energyChar; GattCharacteristic relayChar; WriteOnlyGattCharacteristic<uint8_t> updateChar; }; #endif