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
FCH_31 8:cd489b7c49a0 1 /*
patrick_duc 39:13e66d087ae9 2 * MISNet
FCH_31 8:cd489b7c49a0 3 *
patrick_duc 39:13e66d087ae9 4 * Frame: Gestionnaire de fabrication des messages et décodage des messages recus
FCH_31 8:cd489b7c49a0 5 *
FCH_31 8:cd489b7c49a0 6 * Created on: August 17, 2018 Author: Francis CHATAIN
FCH_31 8:cd489b7c49a0 7 *
FCH_31 8:cd489b7c49a0 8 */
FCH_31 8:cd489b7c49a0 9
FCH_31 8:cd489b7c49a0 10 // ===================================== Includes
FCH_31 8:cd489b7c49a0 11
patrick_duc 39:13e66d087ae9 12 //#include "main.h"
patrick_duc 20:b0281e8a375a 13 #include "DataBase.hpp"
patrick_duc 38:9b43b2415093 14 #include "SMTClearMessagePart.hpp"
patrick_duc 38:9b43b2415093 15 #include "BroadcastIOTClearMessagePart.hpp"
patrick_duc 38:9b43b2415093 16 #include "GenericClearMessagePart.hpp"
patrick_duc 20:b0281e8a375a 17
patrick_duc 20:b0281e8a375a 18
patrick_duc 20:b0281e8a375a 19 using namespace misnet;
patrick_duc 20:b0281e8a375a 20
FCH_31 8:cd489b7c49a0 21
FCH_31 8:cd489b7c49a0 22 // ===================================== Method of class
FCH_31 8:cd489b7c49a0 23
FCH_31 8:cd489b7c49a0 24
patrick_duc 39:13e66d087ae9 25 // ===================================== Constructor
FCH_31 8:cd489b7c49a0 26
patrick_duc 20:b0281e8a375a 27 #ifndef TEST_ENVIRONMENT
patrick_duc 39:13e66d087ae9 28 void DataBase::getRadioParameter(uint32_t &rfFrequency,
patrick_duc 39:13e66d087ae9 29 RadioLoRaBandwidths_t &loraBw,
patrick_duc 39:13e66d087ae9 30 RadioLoRaSpreadingFactors_t &loraSf,
patrick_duc 39:13e66d087ae9 31 int8_t &txOutputPower,
patrick_duc 39:13e66d087ae9 32 uint8_t &bufferSizeMax,
patrick_duc 39:13e66d087ae9 33 int16_t &platform_heartbeat_period,
patrick_duc 39:13e66d087ae9 34 int16_t &payload_heartbeat_period) {
patrick_duc 39:13e66d087ae9 35 rfFrequency = _rf_frequency;
patrick_duc 39:13e66d087ae9 36 loraBw = _lora_bw;
patrick_duc 39:13e66d087ae9 37 loraSf = _lora_sf;
patrick_duc 39:13e66d087ae9 38 txOutputPower = _tx_output_power;
patrick_duc 39:13e66d087ae9 39 bufferSizeMax = _buffer_size_max;
patrick_duc 39:13e66d087ae9 40 platform_heartbeat_period = _platform_heartbeat_period;
patrick_duc 39:13e66d087ae9 41 payload_heartbeat_period = _payload_heartbeat_period;
patrick_duc 13:5414193da1de 42 }
FCH_31 8:cd489b7c49a0 43
patrick_duc 39:13e66d087ae9 44 void DataBase::setRadioParameter(uint32_t rfFrequency,
patrick_duc 39:13e66d087ae9 45 RadioLoRaBandwidths_t loraBw,
patrick_duc 39:13e66d087ae9 46 RadioLoRaSpreadingFactors_t loraSf,
patrick_duc 39:13e66d087ae9 47 int8_t txOutputPower,
patrick_duc 39:13e66d087ae9 48 uint8_t bufferSizeMax,
patrick_duc 39:13e66d087ae9 49 int16_t platform_heartbeat_period,
patrick_duc 39:13e66d087ae9 50 int16_t payload_heartbeat_period) {
patrick_duc 39:13e66d087ae9 51 _rf_frequency = rfFrequency;
patrick_duc 39:13e66d087ae9 52 _lora_bw = loraBw;
patrick_duc 39:13e66d087ae9 53 _lora_sf = loraSf;
patrick_duc 39:13e66d087ae9 54 _tx_output_power = txOutputPower;
patrick_duc 39:13e66d087ae9 55 _buffer_size_max = bufferSizeMax;
patrick_duc 39:13e66d087ae9 56 _platform_heartbeat_period = platform_heartbeat_period;
patrick_duc 39:13e66d087ae9 57 _payload_heartbeat_period = payload_heartbeat_period;
patrick_duc 13:5414193da1de 58
patrick_duc 39:13e66d087ae9 59 printf("*** DTB *** setRadioParameter %ld %d %d %d %d %d %d\r\n", _rf_frequency, _lora_bw,
patrick_duc 39:13e66d087ae9 60 _lora_sf, _tx_output_power, _buffer_size_max, _platform_heartbeat_period, _payload_heartbeat_period);
FCH_31 8:cd489b7c49a0 61 }
patrick_duc 20:b0281e8a375a 62 #endif
patrick_duc 20:b0281e8a375a 63
FCH_31 8:cd489b7c49a0 64
patrick_duc 39:13e66d087ae9 65 void DataBase::setClearMessagePart() {
patrick_duc 38:9b43b2415093 66 switch (this->getTerminalType()) {
patrick_duc 38:9b43b2415093 67 case DataBase::NORMAL_IOT:
patrick_duc 38:9b43b2415093 68 _clear_message_part = new NormalIOTClearMessagePart(_terminal_id, _gateway_id);
patrick_duc 38:9b43b2415093 69 break;
patrick_duc 38:9b43b2415093 70 case DataBase::BROADCAST_IOT:
patrick_duc 38:9b43b2415093 71 _clear_message_part = new BroadcastIOTClearMessagePart(_terminal_id, _gateway_id);
patrick_duc 38:9b43b2415093 72 break;
patrick_duc 38:9b43b2415093 73 case DataBase::SMART_TOOL:
patrick_duc 38:9b43b2415093 74 _clear_message_part = new SMTClearMessagePart(_smart_tool_id);
patrick_duc 38:9b43b2415093 75 break;
patrick_duc 38:9b43b2415093 76 case DataBase::GENERIC_PEER2PEER:
patrick_duc 38:9b43b2415093 77 _clear_message_part = new GenericClearMessagePart(_link_id);
patrick_duc 38:9b43b2415093 78 break;
patrick_duc 38:9b43b2415093 79 default:
patrick_duc 38:9b43b2415093 80 break;
patrick_duc 38:9b43b2415093 81 }
patrick_duc 38:9b43b2415093 82 }
patrick_duc 38:9b43b2415093 83
patrick_duc 38:9b43b2415093 84
patrick_duc 39:13e66d087ae9 85 void DataBase::setIOTConfigDataMessagePart() {
patrick_duc 38:9b43b2415093 86 this->_iot_config_data_message_part = new misnet::IOTConfigDataMessagePart();
patrick_duc 38:9b43b2415093 87
patrick_duc 38:9b43b2415093 88 std::vector<Service*>::iterator serviceIt = this->_payload->getServices().begin();
patrick_duc 38:9b43b2415093 89 for (; serviceIt != this->_payload->getServices().end(); serviceIt++) {
patrick_duc 38:9b43b2415093 90 //DEBUG("About to add description of channel %d\n", (*serviceIt)->getChannelNumber());
patrick_duc 38:9b43b2415093 91 ChannelDescription* channelDescription = new ChannelDescription((*serviceIt)->getChannelNumber(),
patrick_duc 38:9b43b2415093 92 (*serviceIt)->getConfiguration(),
patrick_duc 38:9b43b2415093 93 (*serviceIt)->getMisnetCode(),
patrick_duc 38:9b43b2415093 94 (*serviceIt)->getValueType());
patrick_duc 38:9b43b2415093 95 this->_iot_config_data_message_part->addChannelDescription(channelDescription);
patrick_duc 38:9b43b2415093 96 }
patrick_duc 38:9b43b2415093 97 }
patrick_duc 38:9b43b2415093 98
patrick_duc 38:9b43b2415093 99
patrick_duc 39:13e66d087ae9 100 short DataBase::getNbService(Service::SERVICE_TYPE deviceType) {
patrick_duc 13:5414193da1de 101 short result = 0;
FCH_31 8:cd489b7c49a0 102
patrick_duc 19:4b147d8f9164 103 std::vector<Service*> channels = this->_payload->getServices();
patrick_duc 13:5414193da1de 104
patrick_duc 38:9b43b2415093 105 for (std::vector<Service*>::iterator it = channels.begin(); it != channels.end(); it++) {
patrick_duc 19:4b147d8f9164 106 Service* channel = *it;
patrick_duc 13:5414193da1de 107 if (channel->getDeviceType() == deviceType) {
patrick_duc 13:5414193da1de 108 result++;
patrick_duc 13:5414193da1de 109 }
patrick_duc 13:5414193da1de 110 }
patrick_duc 13:5414193da1de 111
patrick_duc 13:5414193da1de 112 return result;
patrick_duc 13:5414193da1de 113 }
patrick_duc 13:5414193da1de 114
patrick_duc 20:b0281e8a375a 115
patrick_duc 39:13e66d087ae9 116 Service::SERVICE_TYPE DataBase::getServiceType(short channel) {
patrick_duc 20:b0281e8a375a 117 return this->_payload->getServiceByRank(channel)->getDeviceType();
patrick_duc 13:5414193da1de 118 }
patrick_duc 20:b0281e8a375a 119
patrick_duc 20:b0281e8a375a 120
patrick_duc 20:b0281e8a375a 121 std::list<CandidateComponent*> * DataBase::getCandidateSensorsList() {
patrick_duc 20:b0281e8a375a 122 std::list<CandidateComponent*> * result = new std::list<CandidateComponent*>();
patrick_duc 20:b0281e8a375a 123
patrick_duc 20:b0281e8a375a 124 CandidateComponent* candidateComponent = (CandidateComponent*) NULL;
patrick_duc 20:b0281e8a375a 125
patrick_duc 20:b0281e8a375a 126 std::vector<Component*>::iterator componentIt = this->_payload->getComponents().begin();
patrick_duc 20:b0281e8a375a 127 for (; componentIt != this->_payload->getComponents().end(); componentIt++) {
patrick_duc 20:b0281e8a375a 128
patrick_duc 38:9b43b2415093 129 for (std::vector<Service*>::iterator serviceIt = (*componentIt)->getServices().begin();
patrick_duc 38:9b43b2415093 130 serviceIt != (*componentIt)->getServices().end();
patrick_duc 38:9b43b2415093 131 serviceIt++) {
patrick_duc 20:b0281e8a375a 132
patrick_duc 20:b0281e8a375a 133 // Check that the service is enabled
patrick_duc 20:b0281e8a375a 134 if ((*serviceIt)->getState() == Service::ENABLED) {
patrick_duc 20:b0281e8a375a 135
patrick_duc 20:b0281e8a375a 136 // Check that the subsampling rate matches this activation number
patrick_duc 20:b0281e8a375a 137 if ((*serviceIt)->processHeartbeat()) {
patrick_duc 20:b0281e8a375a 138 if (candidateComponent == (CandidateComponent*) NULL) {
patrick_duc 20:b0281e8a375a 139 candidateComponent = new CandidateComponent(*componentIt);
patrick_duc 20:b0281e8a375a 140 }
patrick_duc 20:b0281e8a375a 141 candidateComponent->addService(*serviceIt);
patrick_duc 20:b0281e8a375a 142 }
patrick_duc 20:b0281e8a375a 143 }
patrick_duc 20:b0281e8a375a 144 }
patrick_duc 20:b0281e8a375a 145
patrick_duc 20:b0281e8a375a 146 if (candidateComponent != (CandidateComponent*) NULL) {
patrick_duc 20:b0281e8a375a 147 result->push_back(candidateComponent);
patrick_duc 20:b0281e8a375a 148 candidateComponent = (CandidateComponent*) NULL;
patrick_duc 20:b0281e8a375a 149 }
patrick_duc 20:b0281e8a375a 150
patrick_duc 20:b0281e8a375a 151 }
patrick_duc 20:b0281e8a375a 152
patrick_duc 20:b0281e8a375a 153 return result;
patrick_duc 20:b0281e8a375a 154 }
patrick_duc 38:9b43b2415093 155
patrick_duc 38:9b43b2415093 156
patrick_duc 39:13e66d087ae9 157 std::list<Service*> * DataBase::getCandidateServicesList() {
patrick_duc 38:9b43b2415093 158 std::list<Service*> * result = new std::list<Service*>();
patrick_duc 38:9b43b2415093 159 std::vector<misnet::Service*>& services = this->_payload->getServices();
patrick_duc 38:9b43b2415093 160
patrick_duc 38:9b43b2415093 161 for (std::vector<Service*>::iterator serviceIt = services.begin();
patrick_duc 38:9b43b2415093 162 serviceIt != services.end();
patrick_duc 38:9b43b2415093 163 serviceIt++) {
patrick_duc 38:9b43b2415093 164
patrick_duc 38:9b43b2415093 165 // Check that the service is enabled
patrick_duc 38:9b43b2415093 166 if ((*serviceIt)->getState() == Service::ENABLED) {
patrick_duc 38:9b43b2415093 167
patrick_duc 38:9b43b2415093 168 // Check that the subsampling rate matches this activation number
patrick_duc 38:9b43b2415093 169 if ((*serviceIt)->processHeartbeat()) {
patrick_duc 38:9b43b2415093 170 result->push_back(*serviceIt);
patrick_duc 38:9b43b2415093 171 }
patrick_duc 38:9b43b2415093 172 }
patrick_duc 38:9b43b2415093 173 }
patrick_duc 38:9b43b2415093 174
patrick_duc 38:9b43b2415093 175 return result;
patrick_duc 38:9b43b2415093 176 }