imob

Dependencies:   mbedtls mbed BLE_API nRF51822 AccelSensor

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
osilvam 0:5284859bb3e8 1 #ifndef __BLE_INTERNAL_VALUES_SERVICE_H__
osilvam 0:5284859bb3e8 2 #define __BLE_INTERNAL_VALUES_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 class InternalValuesService {
osilvam 0:5284859bb3e8 10 public:
osilvam 0:5284859bb3e8 11 const static uint16_t INTERNAL_VALUES_SERVICE_UUID = 0xB000;
osilvam 0:5284859bb3e8 12 const static uint16_t LIPOCHARGER_STATE_CHARACTERISTIC_UUID = 0xB001;
osilvam 0:5284859bb3e8 13 const static uint16_t CONTACT_STATE_CHARACTERISTIC_UUID = 0xB002;
osilvam 0:5284859bb3e8 14 const static uint16_t ID1_CHARACTERISTIC_UUID = 0xB003;
osilvam 0:5284859bb3e8 15 const static uint16_t ID2_CHARACTERISTIC_UUID = 0xB004;
osilvam 0:5284859bb3e8 16 const static uint16_t CPC_CHARACTERISTIC_UUID = 0xB005;
osilvam 0:5284859bb3e8 17 const static uint16_t DPC_CHARACTERISTIC_UUID = 0xB006;
osilvam 0:5284859bb3e8 18
osilvam 0:5284859bb3e8 19 InternalValuesService(BLEDevice &_ble, ImobStateService * imobStateServicePtr) :
osilvam 0:5284859bb3e8 20 ble(_ble),
osilvam 0:5284859bb3e8 21 lipoChargerState(2),
osilvam 0:5284859bb3e8 22 contactState(0),
osilvam 0:5284859bb3e8 23 id1(NRF_FICR->DEVICEID[0]),
osilvam 0:5284859bb3e8 24 id2(NRF_FICR->DEVICEID[1]),
osilvam 0:5284859bb3e8 25 chargeProgramCycles(0),
osilvam 0:5284859bb3e8 26 dischargeProgramCycles(0),
osilvam 0:5284859bb3e8 27 ISS(imobStateServicePtr),
osilvam 0:5284859bb3e8 28 LipoChargerCharacteristic(LIPOCHARGER_STATE_CHARACTERISTIC_UUID, &lipoChargerState, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
osilvam 0:5284859bb3e8 29 ContactCharacteristic(CONTACT_STATE_CHARACTERISTIC_UUID, &contactState, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
osilvam 0:5284859bb3e8 30 Id1Characteristic(ID1_CHARACTERISTIC_UUID, &id1),
osilvam 0:5284859bb3e8 31 Id2Characteristic(ID2_CHARACTERISTIC_UUID, &id2),
osilvam 0:5284859bb3e8 32 ChargeProgramCyclesCharacteristic(CPC_CHARACTERISTIC_UUID, &chargeProgramCycles),
osilvam 0:5284859bb3e8 33 DischargeProgramCyclesCharacteristic(DPC_CHARACTERISTIC_UUID, &dischargeProgramCycles)
osilvam 0:5284859bb3e8 34 {
osilvam 0:5284859bb3e8 35 GattCharacteristic *charTable[] = {&LipoChargerCharacteristic, &ContactCharacteristic, &Id1Characteristic, &Id2Characteristic, &ChargeProgramCyclesCharacteristic, &DischargeProgramCyclesCharacteristic};
osilvam 0:5284859bb3e8 36 GattService internalValuesService(INTERNAL_VALUES_SERVICE_UUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
osilvam 0:5284859bb3e8 37
osilvam 0:5284859bb3e8 38 ble.addService(internalValuesService);
osilvam 0:5284859bb3e8 39
osilvam 0:5284859bb3e8 40 uint8_t auxPass[PASSLEN];
osilvam 0:5284859bb3e8 41 uint8_t auxKey[KEYLEN];
osilvam 0:5284859bb3e8 42
osilvam 0:5284859bb3e8 43 id1Array[0] = id1 >> 24;
osilvam 0:5284859bb3e8 44 id1Array[1] = id1 >> 16;
osilvam 0:5284859bb3e8 45 id1Array[2] = id1 >> 8;
osilvam 0:5284859bb3e8 46 id1Array[3] = id1;
osilvam 0:5284859bb3e8 47
osilvam 0:5284859bb3e8 48 id2Array[0] = id2 >> 24;
osilvam 0:5284859bb3e8 49 id2Array[1] = id2 >> 16;
osilvam 0:5284859bb3e8 50 id2Array[2] = id2 >> 8;
osilvam 0:5284859bb3e8 51 id2Array[3] = id2;
osilvam 0:5284859bb3e8 52
osilvam 0:5284859bb3e8 53
osilvam 0:5284859bb3e8 54 for(uint8_t i = 0; i < 8; i++)
osilvam 0:5284859bb3e8 55 auxPass[i] = id1Array[i%4];
osilvam 0:5284859bb3e8 56
osilvam 0:5284859bb3e8 57 for(uint8_t i = 8; i < PASSLEN; i++)
osilvam 0:5284859bb3e8 58 auxPass[i] = id2Array[i%4];
osilvam 0:5284859bb3e8 59
osilvam 0:5284859bb3e8 60 for(uint8_t i = 0; i < KEYLEN; i++)
osilvam 0:5284859bb3e8 61 auxKey[i] = id2Array[i%4];
osilvam 0:5284859bb3e8 62
osilvam 0:5284859bb3e8 63 ISS->setCorrectPass(auxPass);
osilvam 0:5284859bb3e8 64 ISS->setCryptKey(auxKey);
osilvam 0:5284859bb3e8 65
osilvam 0:5284859bb3e8 66 ble.gattServer().write(Id1Characteristic.getValueHandle(), id1Array, 4);
osilvam 0:5284859bb3e8 67 ble.gattServer().write(Id2Characteristic.getValueHandle(), id2Array, 4);
osilvam 0:5284859bb3e8 68 }
osilvam 0:5284859bb3e8 69
osilvam 0:5284859bb3e8 70 void updateLipoChargerState(uint8_t newLipoChargerState)
osilvam 0:5284859bb3e8 71 {
osilvam 0:5284859bb3e8 72 lipoChargerState = newLipoChargerState;
osilvam 0:5284859bb3e8 73 ble.gattServer().write(LipoChargerCharacteristic.getValueHandle(), &lipoChargerState, 1);
osilvam 0:5284859bb3e8 74 }
osilvam 0:5284859bb3e8 75
osilvam 0:5284859bb3e8 76 uint8_t getLipoChargerState()
osilvam 0:5284859bb3e8 77 {
osilvam 0:5284859bb3e8 78 return lipoChargerState;
osilvam 0:5284859bb3e8 79 }
osilvam 0:5284859bb3e8 80
osilvam 0:5284859bb3e8 81 void updateContactState(uint8_t newContactState)
osilvam 0:5284859bb3e8 82 {
osilvam 0:5284859bb3e8 83 contactState = newContactState;
osilvam 0:5284859bb3e8 84 ble.gattServer().write(ContactCharacteristic.getValueHandle(), &contactState, 1);
osilvam 0:5284859bb3e8 85 }
osilvam 0:5284859bb3e8 86
osilvam 0:5284859bb3e8 87 void updateDischargeProgramCyclesCharacteristic()
osilvam 0:5284859bb3e8 88 {
osilvam 0:5284859bb3e8 89 dischargeProgramCyclesArray[0] = dischargeProgramCycles >> 24;
osilvam 0:5284859bb3e8 90 dischargeProgramCyclesArray[1] = dischargeProgramCycles >> 16;
osilvam 0:5284859bb3e8 91 dischargeProgramCyclesArray[2] = dischargeProgramCycles >> 8;
osilvam 0:5284859bb3e8 92 dischargeProgramCyclesArray[3] = dischargeProgramCycles;
osilvam 0:5284859bb3e8 93
osilvam 0:5284859bb3e8 94 ble.gattServer().write(DischargeProgramCyclesCharacteristic.getValueHandle(), dischargeProgramCyclesArray, 4);
osilvam 0:5284859bb3e8 95 dischargeProgramCycles = 0;
osilvam 0:5284859bb3e8 96 }
osilvam 0:5284859bb3e8 97
osilvam 0:5284859bb3e8 98 void incrementDischargeProgramCycles()
osilvam 0:5284859bb3e8 99 {
osilvam 0:5284859bb3e8 100 dischargeProgramCycles++;
osilvam 0:5284859bb3e8 101 }
osilvam 0:5284859bb3e8 102
osilvam 0:5284859bb3e8 103 void updateChargeProgramCyclesCharacteristic()
osilvam 0:5284859bb3e8 104 {
osilvam 0:5284859bb3e8 105 chargeProgramCyclesArray[0] = chargeProgramCycles >> 24;
osilvam 0:5284859bb3e8 106 chargeProgramCyclesArray[1] = chargeProgramCycles >> 16;
osilvam 0:5284859bb3e8 107 chargeProgramCyclesArray[2] = chargeProgramCycles >> 8;
osilvam 0:5284859bb3e8 108 chargeProgramCyclesArray[3] = chargeProgramCycles;
osilvam 0:5284859bb3e8 109
osilvam 0:5284859bb3e8 110 ble.gattServer().write(ChargeProgramCyclesCharacteristic.getValueHandle(), chargeProgramCyclesArray, 4);
osilvam 0:5284859bb3e8 111 chargeProgramCycles = 0;
osilvam 0:5284859bb3e8 112 }
osilvam 0:5284859bb3e8 113
osilvam 0:5284859bb3e8 114 void incrementChargeProgramCycles()
osilvam 0:5284859bb3e8 115 {
osilvam 0:5284859bb3e8 116 chargeProgramCycles++;
osilvam 0:5284859bb3e8 117 }
osilvam 0:5284859bb3e8 118
osilvam 0:5284859bb3e8 119 private:
osilvam 0:5284859bb3e8 120 BLEDevice &ble;
osilvam 0:5284859bb3e8 121 uint8_t lipoChargerState;
osilvam 0:5284859bb3e8 122 uint8_t contactState;
osilvam 0:5284859bb3e8 123
osilvam 0:5284859bb3e8 124 uint32_t id1;
osilvam 0:5284859bb3e8 125 uint32_t id2;
osilvam 0:5284859bb3e8 126 uint32_t chargeProgramCycles;
osilvam 0:5284859bb3e8 127 uint32_t dischargeProgramCycles;
osilvam 0:5284859bb3e8 128
osilvam 0:5284859bb3e8 129 uint8_t id1Array[4];
osilvam 0:5284859bb3e8 130 uint8_t id2Array[4];
osilvam 0:5284859bb3e8 131 uint8_t chargeProgramCyclesArray[4];
osilvam 0:5284859bb3e8 132 uint8_t dischargeProgramCyclesArray[4];
osilvam 0:5284859bb3e8 133
osilvam 0:5284859bb3e8 134 ImobStateService * ISS;
osilvam 0:5284859bb3e8 135
osilvam 0:5284859bb3e8 136 ReadOnlyGattCharacteristic < uint8_t > LipoChargerCharacteristic;
osilvam 0:5284859bb3e8 137 ReadOnlyGattCharacteristic < uint8_t > ContactCharacteristic;
osilvam 0:5284859bb3e8 138
osilvam 0:5284859bb3e8 139 ReadOnlyGattCharacteristic < uint32_t > Id1Characteristic;
osilvam 0:5284859bb3e8 140 ReadOnlyGattCharacteristic < uint32_t > Id2Characteristic;
osilvam 0:5284859bb3e8 141 ReadOnlyGattCharacteristic < uint32_t > ChargeProgramCyclesCharacteristic;
osilvam 0:5284859bb3e8 142 ReadOnlyGattCharacteristic < uint32_t > DischargeProgramCyclesCharacteristic;
osilvam 0:5284859bb3e8 143
osilvam 0:5284859bb3e8 144 };
osilvam 0:5284859bb3e8 145
osilvam 0:5284859bb3e8 146 #endif /* #ifndef __BLE_INTERNAL_VALUES_SERVICE_H__ */