imob

Dependencies:   mbedtls mbed BLE_API nRF51822 AccelSensor

Committer:
osilvam
Date:
Tue Mar 20 14:31:59 2018 +0000
Revision:
0:5284859bb3e8
Child:
1:471d502617fe
imob

Who changed what in which revision?

UserRevisionLine numberNew 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__ */