Version FC
Dependencies: DmTftLibrary eeprom SX1280Lib filesystem mbed
Fork of MSNV2-Terminal_V1-5 by
DataBase.hpp@39:13e66d087ae9, 2018-10-19 (annotated)
- Committer:
- patrick_duc
- Date:
- Fri Oct 19 15:08:35 2018 +0000
- Branch:
- Integration
- Revision:
- 39:13e66d087ae9
- Parent:
- 38:9b43b2415093
Suite d'int?gration (ne compile pas encore).
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
patrick_duc | 20:b0281e8a375a | 1 | /* |
patrick_duc | 39:13e66d087ae9 | 2 | * MISNet |
patrick_duc | 20:b0281e8a375a | 3 | * |
patrick_duc | 39:13e66d087ae9 | 4 | * DataBase: Contient les données du terminal |
patrick_duc | 20:b0281e8a375a | 5 | * |
patrick_duc | 20:b0281e8a375a | 6 | * Created on: August 17, 2018 Author: Francis CHATAIN |
patrick_duc | 20:b0281e8a375a | 7 | * |
patrick_duc | 20:b0281e8a375a | 8 | */ |
patrick_duc | 20:b0281e8a375a | 9 | |
patrick_duc | 20:b0281e8a375a | 10 | #ifndef __DATABASE_HPP__ |
patrick_duc | 20:b0281e8a375a | 11 | #define __DATABASE_HPP__ |
patrick_duc | 20:b0281e8a375a | 12 | |
patrick_duc | 38:9b43b2415093 | 13 | #include <list> |
patrick_duc | 38:9b43b2415093 | 14 | |
patrick_duc | 20:b0281e8a375a | 15 | #include "Context.h" |
patrick_duc | 20:b0281e8a375a | 16 | |
patrick_duc | 20:b0281e8a375a | 17 | #ifndef TEST_ENVIRONMENT |
patrick_duc | 20:b0281e8a375a | 18 | #include "mbed.h" |
patrick_duc | 20:b0281e8a375a | 19 | #include "sx1280-hal.h" |
patrick_duc | 20:b0281e8a375a | 20 | #endif |
patrick_duc | 20:b0281e8a375a | 21 | |
patrick_duc | 39:13e66d087ae9 | 22 | |
patrick_duc | 20:b0281e8a375a | 23 | #include "Service.hpp" |
patrick_duc | 20:b0281e8a375a | 24 | #include "Component.hpp" |
patrick_duc | 20:b0281e8a375a | 25 | #include "CandidateComponent.hpp" |
patrick_duc | 20:b0281e8a375a | 26 | #include "Payload.hpp" |
patrick_duc | 38:9b43b2415093 | 27 | #include "ClearMessagePart.hpp" |
patrick_duc | 38:9b43b2415093 | 28 | #include "ControlMessagePart.hpp" |
patrick_duc | 38:9b43b2415093 | 29 | #include "NormalIOTClearMessagePart.hpp" |
patrick_duc | 38:9b43b2415093 | 30 | #include "IOTConfigDataMessagePart.hpp" |
patrick_duc | 38:9b43b2415093 | 31 | #include "IOTValuesDataMessagePart.hpp" |
patrick_duc | 20:b0281e8a375a | 32 | |
patrick_duc | 20:b0281e8a375a | 33 | |
patrick_duc | 39:13e66d087ae9 | 34 | // ======================================= Define |
patrick_duc | 20:b0281e8a375a | 35 | |
patrick_duc | 20:b0281e8a375a | 36 | #define MODE_STO 0x0000 // P2P Smart Tool |
patrick_duc | 20:b0281e8a375a | 37 | #define MODE_GEN 0x4000 // P2P Generic |
patrick_duc | 20:b0281e8a375a | 38 | #define MODE_IOT 0x8000 // STAR IoT mode |
patrick_duc | 20:b0281e8a375a | 39 | #define MODE_BCA 0xC000 // STAR Broacast mode |
patrick_duc | 20:b0281e8a375a | 40 | |
patrick_duc | 20:b0281e8a375a | 41 | |
patrick_duc | 39:13e66d087ae9 | 42 | namespace misnet { |
patrick_duc | 39:13e66d087ae9 | 43 | class DataBase; |
patrick_duc | 20:b0281e8a375a | 44 | } |
patrick_duc | 20:b0281e8a375a | 45 | |
patrick_duc | 39:13e66d087ae9 | 46 | // ======================================= Class content |
patrick_duc | 39:13e66d087ae9 | 47 | |
patrick_duc | 39:13e66d087ae9 | 48 | class misnet::DataBase { |
patrick_duc | 38:9b43b2415093 | 49 | public: |
patrick_duc | 39:13e66d087ae9 | 50 | |
patrick_duc | 33:6ae45cba7958 | 51 | enum TERMINAL_TYPE { |
patrick_duc | 39:13e66d087ae9 | 52 | SMART_TOOL = 0, // Smart Tool |
patrick_duc | 39:13e66d087ae9 | 53 | GENERIC_PEER2PEER = 1, // Generic tool |
patrick_duc | 39:13e66d087ae9 | 54 | NORMAL_IOT = 2, // Normal IOT (the terminal is attached to a gateway) |
patrick_duc | 39:13e66d087ae9 | 55 | BROADCAST_IOT = 3 // Broadcast IOT (the terminal is not attached to a gateway) |
patrick_duc | 33:6ae45cba7958 | 56 | }; |
patrick_duc | 20:b0281e8a375a | 57 | |
patrick_duc | 38:9b43b2415093 | 58 | DataBase() {} |
patrick_duc | 38:9b43b2415093 | 59 | virtual ~DataBase() {} |
patrick_duc | 38:9b43b2415093 | 60 | |
patrick_duc | 39:13e66d087ae9 | 61 | void init(); |
patrick_duc | 38:9b43b2415093 | 62 | |
patrick_duc | 38:9b43b2415093 | 63 | void setTerminalType(TERMINAL_TYPE terminal_type) { |
patrick_duc | 38:9b43b2415093 | 64 | this->_terminal_type = terminal_type; |
patrick_duc | 38:9b43b2415093 | 65 | } |
patrick_duc | 38:9b43b2415093 | 66 | |
patrick_duc | 38:9b43b2415093 | 67 | TERMINAL_TYPE getTerminalType() { |
patrick_duc | 38:9b43b2415093 | 68 | return this->_terminal_type; |
patrick_duc | 38:9b43b2415093 | 69 | } |
patrick_duc | 38:9b43b2415093 | 70 | |
patrick_duc | 38:9b43b2415093 | 71 | uint16_t getTerminalId() { |
patrick_duc | 38:9b43b2415093 | 72 | return this->_terminal_id; |
patrick_duc | 38:9b43b2415093 | 73 | } |
patrick_duc | 38:9b43b2415093 | 74 | |
patrick_duc | 38:9b43b2415093 | 75 | void setTerminalId(uint16_t terminal_id) { |
patrick_duc | 38:9b43b2415093 | 76 | this->_terminal_id = terminal_id; |
patrick_duc | 38:9b43b2415093 | 77 | } |
patrick_duc | 38:9b43b2415093 | 78 | |
patrick_duc | 38:9b43b2415093 | 79 | uint8_t getGatewayId() { |
patrick_duc | 38:9b43b2415093 | 80 | return this->_gateway_id; |
patrick_duc | 38:9b43b2415093 | 81 | } |
patrick_duc | 38:9b43b2415093 | 82 | |
patrick_duc | 38:9b43b2415093 | 83 | void setGatewayId(uint8_t gateway_id) { |
patrick_duc | 38:9b43b2415093 | 84 | this->_gateway_id = gateway_id; |
patrick_duc | 38:9b43b2415093 | 85 | } |
patrick_duc | 20:b0281e8a375a | 86 | |
patrick_duc | 38:9b43b2415093 | 87 | uint8_t getApplicationId() { |
patrick_duc | 38:9b43b2415093 | 88 | return this->_application_id; |
patrick_duc | 38:9b43b2415093 | 89 | } |
patrick_duc | 38:9b43b2415093 | 90 | |
patrick_duc | 38:9b43b2415093 | 91 | void setApplicationId(uint8_t application_id) { |
patrick_duc | 38:9b43b2415093 | 92 | this->_application_id = application_id; |
patrick_duc | 38:9b43b2415093 | 93 | } |
patrick_duc | 38:9b43b2415093 | 94 | |
patrick_duc | 38:9b43b2415093 | 95 | void setPayloadModuleId(uint16_t payload_module_id) { |
patrick_duc | 38:9b43b2415093 | 96 | this->_payload_module_id = payload_module_id; |
patrick_duc | 38:9b43b2415093 | 97 | } |
patrick_duc | 38:9b43b2415093 | 98 | |
patrick_duc | 38:9b43b2415093 | 99 | uint16_t getPayloadModuleId() { |
patrick_duc | 38:9b43b2415093 | 100 | return this->_payload_module_id; |
patrick_duc | 38:9b43b2415093 | 101 | } |
patrick_duc | 20:b0281e8a375a | 102 | |
patrick_duc | 38:9b43b2415093 | 103 | void setPayloadHeartbeatPeriod(uint16_t payload_heartbeat_period) { |
patrick_duc | 38:9b43b2415093 | 104 | this->_payload_heartbeat_period = payload_heartbeat_period; |
patrick_duc | 38:9b43b2415093 | 105 | } |
patrick_duc | 38:9b43b2415093 | 106 | |
patrick_duc | 38:9b43b2415093 | 107 | void setPlatformHeartbeatPeriod(uint16_t platform_heartbeat_period) { |
patrick_duc | 38:9b43b2415093 | 108 | this->_platform_heartbeat_period = platform_heartbeat_period; |
patrick_duc | 38:9b43b2415093 | 109 | } |
patrick_duc | 38:9b43b2415093 | 110 | |
patrick_duc | 38:9b43b2415093 | 111 | void setClearMessagePart(); |
patrick_duc | 38:9b43b2415093 | 112 | |
patrick_duc | 38:9b43b2415093 | 113 | misnet::ClearMessagePart* getClearMessagePart() { |
patrick_duc | 38:9b43b2415093 | 114 | return _clear_message_part; |
patrick_duc | 38:9b43b2415093 | 115 | } |
patrick_duc | 38:9b43b2415093 | 116 | |
patrick_duc | 38:9b43b2415093 | 117 | void setIOTConfigDataMessagePart(); |
patrick_duc | 38:9b43b2415093 | 118 | |
patrick_duc | 38:9b43b2415093 | 119 | misnet::IOTConfigDataMessagePart* getIOTConfigDataMessagePart() { |
patrick_duc | 38:9b43b2415093 | 120 | return _iot_config_data_message_part; |
patrick_duc | 38:9b43b2415093 | 121 | } |
patrick_duc | 33:6ae45cba7958 | 122 | |
patrick_duc | 38:9b43b2415093 | 123 | void setIOTValuesDataMessagePart(misnet::IOTValuesDataMessagePart* iotValuesDataMessagePart) { |
patrick_duc | 38:9b43b2415093 | 124 | DEBUG("Setting IOT values data message part to %p\n", iotValuesDataMessagePart); |
patrick_duc | 38:9b43b2415093 | 125 | _iot_values_data_message_part = iotValuesDataMessagePart; |
patrick_duc | 38:9b43b2415093 | 126 | } |
patrick_duc | 38:9b43b2415093 | 127 | |
patrick_duc | 38:9b43b2415093 | 128 | misnet::IOTValuesDataMessagePart* getIOTValuesDataMessagePart() { |
patrick_duc | 38:9b43b2415093 | 129 | return _iot_values_data_message_part; |
patrick_duc | 38:9b43b2415093 | 130 | } |
patrick_duc | 38:9b43b2415093 | 131 | |
patrick_duc | 38:9b43b2415093 | 132 | void setPendingServices(std::vector<misnet::Service *>& pendingServices) { |
patrick_duc | 38:9b43b2415093 | 133 | _pending_services = pendingServices; |
patrick_duc | 38:9b43b2415093 | 134 | } |
patrick_duc | 20:b0281e8a375a | 135 | |
patrick_duc | 38:9b43b2415093 | 136 | std::vector<misnet::Service *>& getPendingServices() { |
patrick_duc | 38:9b43b2415093 | 137 | return _pending_services; |
patrick_duc | 38:9b43b2415093 | 138 | } |
patrick_duc | 38:9b43b2415093 | 139 | |
patrick_duc | 39:13e66d087ae9 | 140 | short getNbServices(); // return the number of declared channels for the payload |
patrick_duc | 39:13e66d087ae9 | 141 | short getNbService(misnet::Service::SERVICE_TYPE service); // return the number of declared channels for the payload |
patrick_duc | 39:13e66d087ae9 | 142 | misnet::Service::SERVICE_TYPE getServiceType(short NumService); // Get Service type |
patrick_duc | 39:13e66d087ae9 | 143 | |
patrick_duc | 38:9b43b2415093 | 144 | |
patrick_duc | 39:13e66d087ae9 | 145 | void SetSensorState(short channel_rank, misnet::Service::STATE sensorState); // Set Sensor State (Disable/Enable) |
patrick_duc | 39:13e66d087ae9 | 146 | misnet::Service::STATE GetSensorState(short channel_rank); // Get Sensor State (Disable/Enable) know if the device shall requested |
patrick_duc | 38:9b43b2415093 | 147 | |
patrick_duc | 39:13e66d087ae9 | 148 | void SetSensorValue(uint8_t value); // Set Sensor Value + compute value before storage |
patrick_duc | 39:13e66d087ae9 | 149 | uint8_t GetSensorMessage(short channel_rank); // Get Sensor Message (False si no change no threshold, response formated) |
patrick_duc | 38:9b43b2415093 | 150 | |
patrick_duc | 38:9b43b2415093 | 151 | short getNbActuator(); |
patrick_duc | 38:9b43b2415093 | 152 | void SetActuatorState(); |
patrick_duc | 39:13e66d087ae9 | 153 | misnet::Service::STATE GetActuatorState(short actuator_rank); |
patrick_duc | 38:9b43b2415093 | 154 | |
patrick_duc | 38:9b43b2415093 | 155 | void setPayload(misnet::Payload* payload) { |
patrick_duc | 38:9b43b2415093 | 156 | this->_payload = payload; |
patrick_duc | 38:9b43b2415093 | 157 | } |
patrick_duc | 20:b0281e8a375a | 158 | |
patrick_duc | 38:9b43b2415093 | 159 | misnet::Payload* getPayload() { |
patrick_duc | 38:9b43b2415093 | 160 | return this->_payload; |
patrick_duc | 38:9b43b2415093 | 161 | } |
patrick_duc | 38:9b43b2415093 | 162 | |
patrick_duc | 39:13e66d087ae9 | 163 | std::list<misnet::CandidateComponent*> * getCandidateSensorsList(); |
patrick_duc | 38:9b43b2415093 | 164 | std::list<misnet::Service*> * getCandidateServicesList(); |
patrick_duc | 20:b0281e8a375a | 165 | |
patrick_duc | 38:9b43b2415093 | 166 | // Initialise database for a standard IOT terminal |
patrick_duc | 38:9b43b2415093 | 167 | void initNormalIotTerminal(uint16_t terminal_id, uint8_t gateway_id, uint16_t payload_module_id, |
patrick_duc | 38:9b43b2415093 | 168 | uint16_t platform_heartbeat_period, uint16_t payload_heartbeat_period) { |
patrick_duc | 38:9b43b2415093 | 169 | this->setTerminalType(misnet::DataBase::NORMAL_IOT); |
patrick_duc | 38:9b43b2415093 | 170 | this->setTerminalId(terminal_id); |
patrick_duc | 38:9b43b2415093 | 171 | this->setGatewayId(gateway_id); |
patrick_duc | 38:9b43b2415093 | 172 | this->setPayloadModuleId(payload_module_id); |
patrick_duc | 38:9b43b2415093 | 173 | this->setPayloadHeartbeatPeriod(payload_heartbeat_period); |
patrick_duc | 38:9b43b2415093 | 174 | this->setPlatformHeartbeatPeriod(platform_heartbeat_period); |
patrick_duc | 38:9b43b2415093 | 175 | this->setClearMessagePart(); |
patrick_duc | 38:9b43b2415093 | 176 | this->setIOTConfigDataMessagePart(); |
patrick_duc | 38:9b43b2415093 | 177 | this->setIOTValuesDataMessagePart(NULL); |
patrick_duc | 38:9b43b2415093 | 178 | } |
patrick_duc | 38:9b43b2415093 | 179 | |
patrick_duc | 38:9b43b2415093 | 180 | // Initialise database for a broadcast IOT terminal |
patrick_duc | 38:9b43b2415093 | 181 | void initBroadcastIotTerminal(uint16_t terminal_id, uint8_t application_id, uint16_t payload_module_id, |
patrick_duc | 38:9b43b2415093 | 182 | uint16_t platform_heartbeat_period, uint16_t payload_heartbeat_period) { |
patrick_duc | 38:9b43b2415093 | 183 | this->setTerminalType(misnet::DataBase::BROADCAST_IOT); |
patrick_duc | 38:9b43b2415093 | 184 | this->setTerminalId(terminal_id); |
patrick_duc | 38:9b43b2415093 | 185 | this->setApplicationId(application_id); |
patrick_duc | 38:9b43b2415093 | 186 | this->setPayloadModuleId(payload_module_id); |
patrick_duc | 38:9b43b2415093 | 187 | this->setPayloadHeartbeatPeriod(payload_heartbeat_period); |
patrick_duc | 38:9b43b2415093 | 188 | this->setPlatformHeartbeatPeriod(platform_heartbeat_period); |
patrick_duc | 38:9b43b2415093 | 189 | this->setClearMessagePart(); |
patrick_duc | 38:9b43b2415093 | 190 | this->setIOTConfigDataMessagePart(); |
patrick_duc | 38:9b43b2415093 | 191 | this->setIOTValuesDataMessagePart(NULL); |
patrick_duc | 38:9b43b2415093 | 192 | } |
patrick_duc | 20:b0281e8a375a | 193 | |
patrick_duc | 39:13e66d087ae9 | 194 | // =============================================================== Radio Parameter (getter/setter) |
patrick_duc | 20:b0281e8a375a | 195 | |
patrick_duc | 20:b0281e8a375a | 196 | |
patrick_duc | 20:b0281e8a375a | 197 | #ifndef TEST_ENVIRONMENT |
patrick_duc | 39:13e66d087ae9 | 198 | void getRadioParameter(uint32_t &rfFrequency, |
patrick_duc | 39:13e66d087ae9 | 199 | RadioLoRaBandwidths_t &loraBw, |
patrick_duc | 39:13e66d087ae9 | 200 | RadioLoRaSpreadingFactors_t &loraSf, |
patrick_duc | 39:13e66d087ae9 | 201 | int8_t &txOutputPower, |
patrick_duc | 39:13e66d087ae9 | 202 | uint8_t &bufferSizeMax, |
patrick_duc | 39:13e66d087ae9 | 203 | int16_t &terminal_heartbeat_period, |
patrick_duc | 39:13e66d087ae9 | 204 | int16_t &payload_heartbeat_period); |
patrick_duc | 20:b0281e8a375a | 205 | |
patrick_duc | 39:13e66d087ae9 | 206 | void setRadioParameter(uint32_t rfFrequency, |
patrick_duc | 39:13e66d087ae9 | 207 | RadioLoRaBandwidths_t loraBw, |
patrick_duc | 39:13e66d087ae9 | 208 | RadioLoRaSpreadingFactors_t loraSf, |
patrick_duc | 39:13e66d087ae9 | 209 | int8_t txOutputPower, |
patrick_duc | 39:13e66d087ae9 | 210 | uint8_t ufferSizeMax, |
patrick_duc | 39:13e66d087ae9 | 211 | int16_t terminal_heartbeat_period, |
patrick_duc | 39:13e66d087ae9 | 212 | int16_t payload_heartbeat_period); |
patrick_duc | 20:b0281e8a375a | 213 | #endif |
patrick_duc | 20:b0281e8a375a | 214 | |
patrick_duc | 20:b0281e8a375a | 215 | |
patrick_duc | 20:b0281e8a375a | 216 | // Private variables /methods |
patrick_duc | 38:9b43b2415093 | 217 | private: |
patrick_duc | 39:13e66d087ae9 | 218 | |
patrick_duc | 20:b0281e8a375a | 219 | #ifndef TEST_ENVIRONMENT |
patrick_duc | 39:13e66d087ae9 | 220 | uint32_t _rf_frequency; // HzNominal frequency |
patrick_duc | 39:13e66d087ae9 | 221 | RadioLoRaBandwidths_t _lora_bw; /* 200; 400; 800; 1600 */ |
patrick_duc | 39:13e66d087ae9 | 222 | RadioLoRaSpreadingFactors_t _lora_sf; /* SF5; SF6=; SF7; SF8 ; SF9; SF10; SF11 ; SF12 */ |
patrick_duc | 39:13e66d087ae9 | 223 | int8_t _tx_output_power; /* Output power in dBm [-18..+13] dBm */ |
patrick_duc | 39:13e66d087ae9 | 224 | uint8_t _buffer_size_max; /* Payload size max */ |
patrick_duc | 20:b0281e8a375a | 225 | #endif |
patrick_duc | 20:b0281e8a375a | 226 | |
patrick_duc | 38:9b43b2415093 | 227 | // Normal or broadcast IOT terminal |
patrick_duc | 38:9b43b2415093 | 228 | uint16_t _terminal_id; |
patrick_duc | 38:9b43b2415093 | 229 | uint8_t _gateway_id; |
patrick_duc | 38:9b43b2415093 | 230 | uint8_t _application_id; |
patrick_duc | 38:9b43b2415093 | 231 | uint16_t _payload_module_id; |
patrick_duc | 38:9b43b2415093 | 232 | |
patrick_duc | 38:9b43b2415093 | 233 | // Smart tool |
patrick_duc | 38:9b43b2415093 | 234 | uint16_t _smart_tool_id; |
patrick_duc | 38:9b43b2415093 | 235 | |
patrick_duc | 38:9b43b2415093 | 236 | // Generic peer-to-peer terminal |
patrick_duc | 38:9b43b2415093 | 237 | uint16_t _link_id; |
patrick_duc | 20:b0281e8a375a | 238 | |
patrick_duc | 38:9b43b2415093 | 239 | TERMINAL_TYPE _terminal_type; |
patrick_duc | 38:9b43b2415093 | 240 | uint16_t _platform_heartbeat_period; // Platform heartbeat period |
patrick_duc | 38:9b43b2415093 | 241 | uint16_t _payload_heartbeat_period; // Sensors' scan period |
patrick_duc | 38:9b43b2415093 | 242 | misnet::Payload* _payload; // Payload definition |
patrick_duc | 38:9b43b2415093 | 243 | misnet::ClearMessagePart* _clear_message_part; |
patrick_duc | 38:9b43b2415093 | 244 | misnet::IOTConfigDataMessagePart* _iot_config_data_message_part; |
patrick_duc | 38:9b43b2415093 | 245 | misnet::IOTValuesDataMessagePart* _iot_values_data_message_part; |
patrick_duc | 20:b0281e8a375a | 246 | |
patrick_duc | 38:9b43b2415093 | 247 | // Services whose value must be read (a payload heart beat is ongoing) |
patrick_duc | 38:9b43b2415093 | 248 | // but their value requests an asynchronous read |
patrick_duc | 38:9b43b2415093 | 249 | std::vector<misnet::Service *> _pending_services; |
patrick_duc | 39:13e66d087ae9 | 250 | }; |
patrick_duc | 20:b0281e8a375a | 251 | |
patrick_duc | 20:b0281e8a375a | 252 | #endif // __DATABASE_HPP__ |