Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

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?

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