![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
imob
Dependencies: mbedtls mbed BLE_API nRF51822 AccelSensor
RELAYService.h@0:5284859bb3e8, 2018-03-20 (annotated)
- Committer:
- osilvam
- Date:
- Tue Mar 20 14:31:59 2018 +0000
- Revision:
- 0:5284859bb3e8
- Child:
- 1:471d502617fe
imob
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
osilvam | 0:5284859bb3e8 | 1 | #ifndef __BLE_RELAY_SERVICE_H__ |
osilvam | 0:5284859bb3e8 | 2 | #define __BLE_RELAY_SERVICE_H__ |
osilvam | 0:5284859bb3e8 | 3 | |
osilvam | 0:5284859bb3e8 | 4 | #include "mbed.h" |
osilvam | 0:5284859bb3e8 | 5 | #include "ble/BLE.h" |
osilvam | 0:5284859bb3e8 | 6 | #include "ble/Gap.h" |
osilvam | 0:5284859bb3e8 | 7 | #include "ImobStateService.h" |
osilvam | 0:5284859bb3e8 | 8 | |
osilvam | 0:5284859bb3e8 | 9 | #define RELAY_TIME 2000000 // us |
osilvam | 0:5284859bb3e8 | 10 | #define CTR12V_TIME 100000 // us |
osilvam | 0:5284859bb3e8 | 11 | |
osilvam | 0:5284859bb3e8 | 12 | class RELAYService { |
osilvam | 0:5284859bb3e8 | 13 | public: |
osilvam | 0:5284859bb3e8 | 14 | const static uint16_t RELAY_SERVICE_UUID = 0xC000; |
osilvam | 0:5284859bb3e8 | 15 | const static uint16_t RELAY_STATE_CHARACTERISTIC_UUID = 0xC001; |
osilvam | 0:5284859bb3e8 | 16 | |
osilvam | 0:5284859bb3e8 | 17 | RELAYService(BLEDevice &_ble, ImobStateService * imobStateServicePtr) : |
osilvam | 0:5284859bb3e8 | 18 | ble(_ble), |
osilvam | 0:5284859bb3e8 | 19 | relayState(0), |
osilvam | 0:5284859bb3e8 | 20 | actuatedRelay(P0_10,0), |
osilvam | 0:5284859bb3e8 | 21 | Ctr12v(P0_3,0), |
osilvam | 0:5284859bb3e8 | 22 | ISS(imobStateServicePtr), |
osilvam | 0:5284859bb3e8 | 23 | RelayCharacteristic(RELAY_STATE_CHARACTERISTIC_UUID, &relayState, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) |
osilvam | 0:5284859bb3e8 | 24 | { |
osilvam | 0:5284859bb3e8 | 25 | GattCharacteristic *charTable[] = {&RelayCharacteristic}; |
osilvam | 0:5284859bb3e8 | 26 | GattService relayService(RELAY_SERVICE_UUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *)); |
osilvam | 0:5284859bb3e8 | 27 | |
osilvam | 0:5284859bb3e8 | 28 | ble.addService(relayService); |
osilvam | 0:5284859bb3e8 | 29 | |
osilvam | 0:5284859bb3e8 | 30 | ble.gap().onDisconnection(this, &RELAYService::onDisconnectionFilter); |
osilvam | 0:5284859bb3e8 | 31 | ble.gattServer().onDataWritten(this, &RELAYService::onDataWritten); |
osilvam | 0:5284859bb3e8 | 32 | } |
osilvam | 0:5284859bb3e8 | 33 | |
osilvam | 0:5284859bb3e8 | 34 | GattAttribute::Handle_t getValueHandle() const |
osilvam | 0:5284859bb3e8 | 35 | { |
osilvam | 0:5284859bb3e8 | 36 | return RelayCharacteristic.getValueHandle(); |
osilvam | 0:5284859bb3e8 | 37 | } |
osilvam | 0:5284859bb3e8 | 38 | |
osilvam | 0:5284859bb3e8 | 39 | void updateRelayState(uint8_t newRelayState) { |
osilvam | 0:5284859bb3e8 | 40 | relayState = newRelayState; |
osilvam | 0:5284859bb3e8 | 41 | actuatedRelay = newRelayState; |
osilvam | 0:5284859bb3e8 | 42 | ble.gattServer().write(RelayCharacteristic.getValueHandle(), &relayState, 1); |
osilvam | 0:5284859bb3e8 | 43 | } |
osilvam | 0:5284859bb3e8 | 44 | |
osilvam | 0:5284859bb3e8 | 45 | void activate() |
osilvam | 0:5284859bb3e8 | 46 | { |
osilvam | 0:5284859bb3e8 | 47 | Ctr12v = 1; |
osilvam | 0:5284859bb3e8 | 48 | wait_us(CTR12V_TIME); |
osilvam | 0:5284859bb3e8 | 49 | updateRelayState(1); |
osilvam | 0:5284859bb3e8 | 50 | wait_us(RELAY_TIME);//depending of the time switching desired |
osilvam | 0:5284859bb3e8 | 51 | updateRelayState(0); |
osilvam | 0:5284859bb3e8 | 52 | wait_us(CTR12V_TIME); |
osilvam | 0:5284859bb3e8 | 53 | Ctr12v = 0; |
osilvam | 0:5284859bb3e8 | 54 | } |
osilvam | 0:5284859bb3e8 | 55 | |
osilvam | 0:5284859bb3e8 | 56 | protected: |
osilvam | 0:5284859bb3e8 | 57 | |
osilvam | 0:5284859bb3e8 | 58 | void onDisconnectionFilter(const Gap::DisconnectionCallbackParams_t *params) |
osilvam | 0:5284859bb3e8 | 59 | { |
osilvam | 0:5284859bb3e8 | 60 | if(authenticated && activated) |
osilvam | 0:5284859bb3e8 | 61 | { |
osilvam | 0:5284859bb3e8 | 62 | activate(); |
osilvam | 0:5284859bb3e8 | 63 | //ISS->resetAuthenticationValues(); |
osilvam | 0:5284859bb3e8 | 64 | } |
osilvam | 0:5284859bb3e8 | 65 | } |
osilvam | 0:5284859bb3e8 | 66 | |
osilvam | 0:5284859bb3e8 | 67 | virtual void onDataWritten(const GattWriteCallbackParams *params) |
osilvam | 0:5284859bb3e8 | 68 | { |
osilvam | 0:5284859bb3e8 | 69 | if ((params->handle == RelayCharacteristic.getValueHandle()) && (params->len == 1) && authenticated) |
osilvam | 0:5284859bb3e8 | 70 | { |
osilvam | 0:5284859bb3e8 | 71 | activate(); |
osilvam | 0:5284859bb3e8 | 72 | ISS->resetAuthenticationValues(); |
osilvam | 0:5284859bb3e8 | 73 | |
osilvam | 0:5284859bb3e8 | 74 | if(!activated) |
osilvam | 0:5284859bb3e8 | 75 | ISS->updateActivationValue(1); |
osilvam | 0:5284859bb3e8 | 76 | } |
osilvam | 0:5284859bb3e8 | 77 | else |
osilvam | 0:5284859bb3e8 | 78 | updateRelayState(0); |
osilvam | 0:5284859bb3e8 | 79 | } |
osilvam | 0:5284859bb3e8 | 80 | |
osilvam | 0:5284859bb3e8 | 81 | private: |
osilvam | 0:5284859bb3e8 | 82 | |
osilvam | 0:5284859bb3e8 | 83 | BLEDevice &ble; |
osilvam | 0:5284859bb3e8 | 84 | uint8_t relayState; |
osilvam | 0:5284859bb3e8 | 85 | DigitalOut actuatedRelay; |
osilvam | 0:5284859bb3e8 | 86 | DigitalOut Ctr12v; |
osilvam | 0:5284859bb3e8 | 87 | |
osilvam | 0:5284859bb3e8 | 88 | ImobStateService * ISS; |
osilvam | 0:5284859bb3e8 | 89 | |
osilvam | 0:5284859bb3e8 | 90 | ReadWriteGattCharacteristic<uint8_t> RelayCharacteristic; |
osilvam | 0:5284859bb3e8 | 91 | }; |
osilvam | 0:5284859bb3e8 | 92 | |
osilvam | 0:5284859bb3e8 | 93 | #endif /* #ifndef __BLE_RELAY_SERVICE_H__ */ |