Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
patrick_duc
Date:
Fri Oct 19 06:32:59 2018 +0000
Branch:
Integration
Revision:
38:9b43b2415093
Parent:
20:b0281e8a375a
Child:
39:13e66d087ae9
Suite d'int?gration. Compilation  non encore test?e.

Who changed what in which revision?

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