Bluetooth Low Energy for Smart Plug
Dependencies: BLE_API mbed nRF51822
Fork of SmartPlugBLE by
Services/SmartPlugService.cpp@0:25ad6eba7916, 2015-07-07 (annotated)
- 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?
User | Revision | Line number | New 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,¤tChar,&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 | } |