Bluetooth Low Energy for Smart Plug

Dependencies:   BLE_API mbed nRF51822

Revision:
1:e036e77762fa
Parent:
0:25ad6eba7916
Child:
2:6db5c9a2894c
--- a/Services/SmartPlugService.cpp	Tue Jul 07 04:02:14 2015 +0000
+++ b/Services/SmartPlugService.cpp	Tue Jul 07 04:58:28 2015 +0000
@@ -6,12 +6,15 @@
 
 SmartPlugService::SmartPlugService(BLE &_ble, SmartPlugBLE &sys):
         ble(_ble), system(sys),
-        voltageChar(SPS_UUID_VOLTAGE_CHAR,voltage),
-        currentChar(SPS_UUID_CURERNT_CHAR,current),
-        powerChar(SPS_UUID_POWER_CHAR,power),
-        powerFactorChar(SPS_UUID_POWER_FACTOR_CHAR,powerFactor),
-        energyChar(SPS_UUID_ENERGY_CHAR,energy),
-        relayChar(SPS_UUID_RELAY_CHAR,relayValue),
+        voltageChar(SPS_UUID_VOLTAGE_CHAR,&voltage,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        currentChar(SPS_UUID_CURERNT_CHAR,&current,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        powerChar(SPS_UUID_POWER_CHAR,&power,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        powerFactorChar(SPS_UUID_POWER_FACTOR_CHAR,&powerFactor,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        energyChar(SPS_UUID_ENERGY_CHAR,&energy,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        relayChar(SPS_UUID_RELAY_CHAR, relayValue.getDataPointer(),
+                relayValue.getLenBytes(), RelayValueBytes::MAX_SIZE_BYTES,
+                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY |
+                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ),
         updateChar(SPS_UUID_UPDATE_CHAR,NULL)
 {
     (&system)->addObserver(*this);
@@ -41,11 +44,8 @@
 {
     if (ble.getGapState().connected) 
     {
-        voltage[0] = v>>24;
-        voltage[1] = (v&0x00FFFFFF)>>16;
-        voltage[2] = (v&0x0000FFFF)>>8;
-        voltage[3] = v&0x000000FF;
-        ble.updateCharacteristicValue(voltageChar.getValueHandle(),voltage,4);
+        voltage = v;
+        ble.updateCharacteristicValue(voltageChar.getValueHandle(),&voltage,4);
     }
 }
 
@@ -53,11 +53,8 @@
 {
     if (ble.getGapState().connected) 
     {
-        current[0] = c>>24;
-        current[1] = (c&0x00FFFFFF)>>16;
-        current[2] = (c&0x0000FFFF)>>8;
-        current[3] = c&0x000000FF;
-        ble.updateCharacteristicValue(currentChar.getValueHandle(),voltage,4);
+        current = c;
+        ble.updateCharacteristicValue(currentChar.getValueHandle(),&current,4);
     }
 }
 
@@ -65,23 +62,27 @@
 {
     if (ble.getGapState().connected) 
     {
-        power[0] = p>>24;
-        power[1] = (p&0x00FFFFFF)>>16;
-        power[2] = (p&0x0000FFFF)>>8;
-        power[3] = p&0x000000FF;
-        ble.updateCharacteristicValue(powerChar.getValueHandle(),voltage,4);        
+        power = p;
+        ble.updateCharacteristicValue(powerChar.getValueHandle(),&power,4);        
     }
 }
 
 void SmartPlugService::updatePowerFactor(unsigned long pf)
 {
     if (ble.getGapState().connected) 
-    {
-        powerFactor[0] = pf>>24;
-        powerFactor[1] = (pf&0x00FFFFFF)>>16;
-        powerFactor[2] = (pf&0x0000FFFF)>>8;
-        powerFactor[3] = pf&0x000000FF;        
-        ble.updateCharacteristicValue(powerFactorChar.getValueHandle(),voltage,4);
+    {    
+        powerFactor = pf;
+        ble.updateCharacteristicValue(powerFactorChar.getValueHandle(),&powerFactor,4);
+    }
+}
+
+void SmartPlugService::updateRelay(Relay* relay)
+{
+    if (ble.getGapState().connected) 
+    {   
+        relayValue.updateData(relay);
+        ble.updateCharacteristicValue(relayChar.getValueHandle(),relayValue.getDataPointer(),
+        relayValue.getLenBytes());
     }
 }