Bluetooth Low Energy for Smart Plug

Dependencies:   BLE_API mbed nRF51822

Fork of SmartPlugBLE by Pavit Noinongyao

Committer:
Slepnir
Date:
Tue Jul 07 04:02:14 2015 +0000
Revision:
0:25ad6eba7916
Child:
1:e036e77762fa
V1:; - Successfully advertise and connect ; - Update fail; - Can read only 4 bit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Slepnir 0:25ad6eba7916 1 #include "ble/BLE.h"
Slepnir 0:25ad6eba7916 2 #include "mbed.h"
Slepnir 0:25ad6eba7916 3 #include "SmartPlugService.h"
Slepnir 0:25ad6eba7916 4 #include "SmartPlugBLE.h"
Slepnir 0:25ad6eba7916 5
Slepnir 0:25ad6eba7916 6
Slepnir 0:25ad6eba7916 7 SmartPlugService::SmartPlugService(BLE &_ble, SmartPlugBLE &sys):
Slepnir 0:25ad6eba7916 8 ble(_ble), system(sys),
Slepnir 0:25ad6eba7916 9 voltageChar(SPS_UUID_VOLTAGE_CHAR,voltage),
Slepnir 0:25ad6eba7916 10 currentChar(SPS_UUID_CURERNT_CHAR,current),
Slepnir 0:25ad6eba7916 11 powerChar(SPS_UUID_POWER_CHAR,power),
Slepnir 0:25ad6eba7916 12 powerFactorChar(SPS_UUID_POWER_FACTOR_CHAR,powerFactor),
Slepnir 0:25ad6eba7916 13 energyChar(SPS_UUID_ENERGY_CHAR,energy),
Slepnir 0:25ad6eba7916 14 relayChar(SPS_UUID_RELAY_CHAR,relayValue),
Slepnir 0:25ad6eba7916 15 updateChar(SPS_UUID_UPDATE_CHAR,NULL)
Slepnir 0:25ad6eba7916 16 {
Slepnir 0:25ad6eba7916 17 (&system)->addObserver(*this);
Slepnir 0:25ad6eba7916 18 }
Slepnir 0:25ad6eba7916 19
Slepnir 0:25ad6eba7916 20 void SmartPlugService::onDataWritten(const GattWriteCallbackParams *params)
Slepnir 0:25ad6eba7916 21 {
Slepnir 0:25ad6eba7916 22 if(params->handle == updateChar.getValueHandle())
Slepnir 0:25ad6eba7916 23 {
Slepnir 0:25ad6eba7916 24 system.updateData();
Slepnir 0:25ad6eba7916 25 }
Slepnir 0:25ad6eba7916 26 }
Slepnir 0:25ad6eba7916 27 void SmartPlugService::update(void* data)
Slepnir 0:25ad6eba7916 28 {
Slepnir 0:25ad6eba7916 29 updateData((SmartPlug*)data);
Slepnir 0:25ad6eba7916 30 }
Slepnir 0:25ad6eba7916 31
Slepnir 0:25ad6eba7916 32 void SmartPlugService::updateData(SmartPlug* data)
Slepnir 0:25ad6eba7916 33 {
Slepnir 0:25ad6eba7916 34 updateVoltage(data->getVoltage());
Slepnir 0:25ad6eba7916 35 updateCurrent(data->getCurrent());
Slepnir 0:25ad6eba7916 36 updatePower(data->getPower());
Slepnir 0:25ad6eba7916 37 updatePowerFactor(data->getPowerFactor());
Slepnir 0:25ad6eba7916 38 }
Slepnir 0:25ad6eba7916 39
Slepnir 0:25ad6eba7916 40 void SmartPlugService::updateVoltage(unsigned long v)
Slepnir 0:25ad6eba7916 41 {
Slepnir 0:25ad6eba7916 42 if (ble.getGapState().connected)
Slepnir 0:25ad6eba7916 43 {
Slepnir 0:25ad6eba7916 44 voltage[0] = v>>24;
Slepnir 0:25ad6eba7916 45 voltage[1] = (v&0x00FFFFFF)>>16;
Slepnir 0:25ad6eba7916 46 voltage[2] = (v&0x0000FFFF)>>8;
Slepnir 0:25ad6eba7916 47 voltage[3] = v&0x000000FF;
Slepnir 0:25ad6eba7916 48 ble.updateCharacteristicValue(voltageChar.getValueHandle(),voltage,4);
Slepnir 0:25ad6eba7916 49 }
Slepnir 0:25ad6eba7916 50 }
Slepnir 0:25ad6eba7916 51
Slepnir 0:25ad6eba7916 52 void SmartPlugService::updateCurrent(unsigned long c)
Slepnir 0:25ad6eba7916 53 {
Slepnir 0:25ad6eba7916 54 if (ble.getGapState().connected)
Slepnir 0:25ad6eba7916 55 {
Slepnir 0:25ad6eba7916 56 current[0] = c>>24;
Slepnir 0:25ad6eba7916 57 current[1] = (c&0x00FFFFFF)>>16;
Slepnir 0:25ad6eba7916 58 current[2] = (c&0x0000FFFF)>>8;
Slepnir 0:25ad6eba7916 59 current[3] = c&0x000000FF;
Slepnir 0:25ad6eba7916 60 ble.updateCharacteristicValue(currentChar.getValueHandle(),voltage,4);
Slepnir 0:25ad6eba7916 61 }
Slepnir 0:25ad6eba7916 62 }
Slepnir 0:25ad6eba7916 63
Slepnir 0:25ad6eba7916 64 void SmartPlugService::updatePower(unsigned long p)
Slepnir 0:25ad6eba7916 65 {
Slepnir 0:25ad6eba7916 66 if (ble.getGapState().connected)
Slepnir 0:25ad6eba7916 67 {
Slepnir 0:25ad6eba7916 68 power[0] = p>>24;
Slepnir 0:25ad6eba7916 69 power[1] = (p&0x00FFFFFF)>>16;
Slepnir 0:25ad6eba7916 70 power[2] = (p&0x0000FFFF)>>8;
Slepnir 0:25ad6eba7916 71 power[3] = p&0x000000FF;
Slepnir 0:25ad6eba7916 72 ble.updateCharacteristicValue(powerChar.getValueHandle(),voltage,4);
Slepnir 0:25ad6eba7916 73 }
Slepnir 0:25ad6eba7916 74 }
Slepnir 0:25ad6eba7916 75
Slepnir 0:25ad6eba7916 76 void SmartPlugService::updatePowerFactor(unsigned long pf)
Slepnir 0:25ad6eba7916 77 {
Slepnir 0:25ad6eba7916 78 if (ble.getGapState().connected)
Slepnir 0:25ad6eba7916 79 {
Slepnir 0:25ad6eba7916 80 powerFactor[0] = pf>>24;
Slepnir 0:25ad6eba7916 81 powerFactor[1] = (pf&0x00FFFFFF)>>16;
Slepnir 0:25ad6eba7916 82 powerFactor[2] = (pf&0x0000FFFF)>>8;
Slepnir 0:25ad6eba7916 83 powerFactor[3] = pf&0x000000FF;
Slepnir 0:25ad6eba7916 84 ble.updateCharacteristicValue(powerFactorChar.getValueHandle(),voltage,4);
Slepnir 0:25ad6eba7916 85 }
Slepnir 0:25ad6eba7916 86 }
Slepnir 0:25ad6eba7916 87
Slepnir 0:25ad6eba7916 88 void SmartPlugService::setupService(void)
Slepnir 0:25ad6eba7916 89 {
Slepnir 0:25ad6eba7916 90
Slepnir 0:25ad6eba7916 91 static bool serviceAdded = false; /* We should only ever need to add the service once. */
Slepnir 0:25ad6eba7916 92 if (serviceAdded)
Slepnir 0:25ad6eba7916 93 {
Slepnir 0:25ad6eba7916 94 return;
Slepnir 0:25ad6eba7916 95 }
Slepnir 0:25ad6eba7916 96
Slepnir 0:25ad6eba7916 97
Slepnir 0:25ad6eba7916 98 GattCharacteristic *charTable[] = {&voltageChar,&currentChar,&powerChar,
Slepnir 0:25ad6eba7916 99 &powerFactorChar,&energyChar,&relayChar,
Slepnir 0:25ad6eba7916 100 &updateChar
Slepnir 0:25ad6eba7916 101 };
Slepnir 0:25ad6eba7916 102 GattService smartPlugService = GattService(SPS_UUID_SERVICE, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
Slepnir 0:25ad6eba7916 103 ble.addService(smartPlugService);
Slepnir 0:25ad6eba7916 104
Slepnir 0:25ad6eba7916 105 }