Bluetooth Low Energy for Smart Plug
Dependencies: BLE_API mbed nRF51822
Fork of SmartPlugBLE by
SmartPlugService.h
00001 #ifndef SP_SERVICE_H 00002 #define SP_SERVICE_H 00003 00004 #include "ble/BLE.h" 00005 #include "MVC.h" 00006 #include "mbed.h" 00007 #include "SmartPlugBLE.h" 00008 00009 00010 #define FULL_UUID(uuid_16) { \ 00011 0x9B,0x3F,uuid_16>>16,uuid_16&0xFF,0x65,0x80,0x47,0x51, \ 00012 0xB0,0x2F,0xA7,0xB5,0x19,0x4C,0x7F,0x23 \ 00013 } 00014 00015 static const uint16_t SPS_UUID_SERVICE = 0x1522; 00016 static const uint16_t SPS_UUID_VOLTAGE_CHAR = 0x1523; 00017 static const uint16_t SPS_UUID_CURERNT_CHAR = 0x1524; 00018 static const uint16_t SPS_UUID_POWER_CHAR = 0x1525; 00019 static const uint16_t SPS_UUID_POWER_FACTOR_CHAR = 0x1526; 00020 static const uint16_t SPS_UUID_ENERGY_CHAR = 0x1527; 00021 static const uint16_t SPS_UUID_RELAY_CHAR = 0x1528; 00022 static const uint16_t SPS_UUID_UPDATE_CHAR = 0x1529; 00023 00024 static const uint8_t SPS_UUID_SERVICE_FULL[] = FULL_UUID(SPS_UUID_SERVICE); 00025 static const uint8_t SPS_UUID_VOLTAGE_CHAR_FULL[] = FULL_UUID(SPS_UUID_VOLTAGE_CHAR); 00026 static const uint8_t SPS_UUID_CURERNT_CHAR_FULL[] = FULL_UUID(SPS_UUID_CURERNT_CHAR); 00027 static const uint8_t SPS_UUID_POWER_CHAR_FULL[] = FULL_UUID(SPS_UUID_POWER_CHAR); 00028 static const uint8_t SPS_UUID_POWER_FACTOR_CHAR_FULL[] = FULL_UUID(SPS_UUID_POWER_FACTOR_CHAR); 00029 static const uint8_t SPS_UUID_ENERGY_CHAR_FULL[] = FULL_UUID(SPS_UUID_ENERGY_CHAR); 00030 static const uint8_t SPS_UUID_RELAY_CHAR_FULL[] = FULL_UUID(SPS_UUID_RELAY_CHAR); 00031 static const uint8_t SPS_UUID_UPDATE_CHAR_FULL[] = FULL_UUID(SPS_UUID_UPDATE_CHAR); 00032 00033 00034 class SmartPlugService: public Observer 00035 { 00036 public: 00037 SmartPlugService(BLE &_ble, SmartPlugBLE &sys); 00038 00039 void updateVoltage(uint32_t value); 00040 void updateCurrent(uint32_t value); 00041 void updatePower(uint32_t value); 00042 void updatePowerFactor(uint32_t value); 00043 void onDataWritten(const GattWriteCallbackParams *params); 00044 void updateObserver(void* data); 00045 void updateRelay(Relay* relay); 00046 void updateEnergy(uint32_t value); 00047 void setupService(void); 00048 private: 00049 class RelayValueBytes 00050 { 00051 public: 00052 static const uint8_t MAX_SIZE_BYTES = 2; 00053 static const uint8_t STATE_BIT_INDEX = 7; 00054 static const uint8_t STATE_BYTE_INDEX = 0; 00055 static const uint8_t HOUR_TIMER_BYTE_INDEX = 0; 00056 static const uint8_t MINUTE_TIMER_BYTE_INDEX = 1; 00057 00058 RelayValueBytes() 00059 { 00060 memset(data,0,MAX_SIZE_BYTES); 00061 } 00062 00063 void updateData(Relay* relay) 00064 { 00065 printf("updateData:: min = %d,hour = %d,state = %d\r\n",relay->getMinCounter(),relay->getHrCounter(),relay->getState()); 00066 data[STATE_BYTE_INDEX] |= ((relay->getState())<<STATE_BIT_INDEX); 00067 data[HOUR_TIMER_BYTE_INDEX] |= relay->getHrCounter(); 00068 data[MINUTE_TIMER_BYTE_INDEX] = relay->getMinCounter(); 00069 } 00070 00071 void swap(uint8_t* ptr1,uint8_t* ptr2) 00072 { 00073 uint8_t temp; 00074 temp = *ptr1; 00075 *ptr1 = *ptr2; 00076 *ptr2 = temp; 00077 } 00078 00079 void reverse(uint8_t* ptr) 00080 { 00081 swap(&ptr[0],&ptr[1]); 00082 } 00083 00084 uint8_t* getDataPointer() 00085 { 00086 //reverse(data); 00087 return data; 00088 } 00089 00090 uint8_t getLenBytes() 00091 { 00092 if(data[HOUR_TIMER_BYTE_INDEX] == 0 && data[MINUTE_TIMER_BYTE_INDEX] == 0) 00093 return 1; 00094 else 00095 return MAX_SIZE_BYTES; 00096 } 00097 private: 00098 uint8_t data[MAX_SIZE_BYTES]; 00099 }; 00100 00101 BLE ble; 00102 DigitalOut led; 00103 00104 uint8_t voltage[4]; 00105 uint8_t current[4]; 00106 uint8_t power[4]; 00107 uint8_t powerFactor[4]; 00108 uint8_t energy[4]; 00109 00110 RelayValueBytes relayValue; 00111 //uint8_t updateValue; 00112 SmartPlugBLE& system; 00113 00114 ReadOnlyGattCharacteristic<uint8_t[4]> voltageChar; 00115 ReadOnlyGattCharacteristic<uint8_t[4]> currentChar; 00116 ReadOnlyGattCharacteristic<uint8_t[4]> powerChar; 00117 ReadOnlyGattCharacteristic<uint8_t[4]> powerFactorChar; 00118 ReadOnlyGattCharacteristic<uint8_t[4]> energyChar; 00119 GattCharacteristic relayChar; 00120 WriteOnlyGattCharacteristic<uint8_t> updateChar; 00121 }; 00122 00123 #endif
Generated on Fri Jul 22 2022 14:22:22 by 1.7.2