lora sensnode

Dependencies:   libmDot mbed-rtos mbed

Fork of mDot_LoRa_Sensornode by Adrian Mitevski

Committer:
socie123
Date:
Wed Aug 10 12:54:10 2016 +0000
Revision:
1:e67174cc4953
Parent:
0:f2815503561f
lora sensnode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitea1 0:f2815503561f 1 /*
mitea1 0:f2815503561f 2 * TaskDatahandler.cpp
mitea1 0:f2815503561f 3 *
mitea1 0:f2815503561f 4 * Created on: May 27, 2016
mitea1 0:f2815503561f 5 * Author: Adrian
mitea1 0:f2815503561f 6 */
mitea1 0:f2815503561f 7
mitea1 0:f2815503561f 8 #include "TaskDatahandler.h"
mitea1 0:f2815503561f 9
mitea1 0:f2815503561f 10 TaskDatahandler::TaskDatahandler(LoRa* lora,Mutex* mutexLora, QueueBundle queueBundle,
mitea1 0:f2815503561f 11 osPriority priority,uint32_t stackSize, unsigned char* stackPointer){
mitea1 0:f2815503561f 12 setLoRa(lora);
mitea1 0:f2815503561f 13 setMutex(mutexLora);
mitea1 0:f2815503561f 14 setQueueBundle(queueBundle);
mitea1 0:f2815503561f 15 setPriority(priority);
mitea1 0:f2815503561f 16 setStackSize(stackSize);
mitea1 0:f2815503561f 17 setStackPointer(stackPointer);
mitea1 0:f2815503561f 18 setState(SLEEPING);
mitea1 0:f2815503561f 19 }
mitea1 0:f2815503561f 20
mitea1 0:f2815503561f 21 TaskDatahandler::~TaskDatahandler() {
mitea1 0:f2815503561f 22 // TODO Auto-generated destructor stub
mitea1 0:f2815503561f 23 }
mitea1 0:f2815503561f 24
mitea1 0:f2815503561f 25 osStatus TaskDatahandler::start(){
mitea1 0:f2815503561f 26 setState(RUNNING);
mitea1 0:f2815503561f 27 this->thread = new rtos::Thread(callBack,this);
mitea1 0:f2815503561f 28 }
mitea1 0:f2815503561f 29
mitea1 0:f2815503561f 30 osStatus TaskDatahandler::stop(){
mitea1 0:f2815503561f 31 thread->terminate();
mitea1 0:f2815503561f 32 setState(SLEEPING);
mitea1 0:f2815503561f 33 delete this->thread;
mitea1 0:f2815503561f 34 }
mitea1 0:f2815503561f 35
mitea1 0:f2815503561f 36 void TaskDatahandler::callBack(void const* data){
mitea1 0:f2815503561f 37 // WOODHAMMER METHOD of Casting!
mitea1 0:f2815503561f 38 const TaskDatahandler* constInstance = static_cast<const TaskDatahandler* >(data);
mitea1 0:f2815503561f 39 TaskDatahandler* instance = const_cast<TaskDatahandler*>(constInstance);
mitea1 0:f2815503561f 40
mitea1 0:f2815503561f 41 instance->handleData();
mitea1 0:f2815503561f 42 }
mitea1 0:f2815503561f 43
mitea1 0:f2815503561f 44 void TaskDatahandler::handleData(){
mitea1 0:f2815503561f 45
mitea1 0:f2815503561f 46 while(true){
mitea1 0:f2815503561f 47 getMessagesFromSensorQueues();
mitea1 0:f2815503561f 48 forwardSensorMessages();
mitea1 0:f2815503561f 49 osDelay(DATAHANLDER_TASK_DELAY_MS);
mitea1 0:f2815503561f 50 }
mitea1 0:f2815503561f 51 }
mitea1 0:f2815503561f 52
mitea1 0:f2815503561f 53 void TaskDatahandler::getMessagesFromSensorQueues(){
mitea1 0:f2815503561f 54 lightMeasureEvent = queueBundle.queueLight->get(0);
mitea1 0:f2815503561f 55 temperatureMeasureEvent = queueBundle.queueTemperature->get(0);
mitea1 0:f2815503561f 56 pressureMeasureEvent = queueBundle.queuePressure->get(0);
mitea1 0:f2815503561f 57 humidityMeasureEvent = queueBundle.queueHumidity->get(0);
mitea1 0:f2815503561f 58 accelerationMeasureEvent = queueBundle.queueAcceleration->get(0);
mitea1 0:f2815503561f 59 gyroscopeMeasureEvent = queueBundle.queueGyro->get(0);
mitea1 0:f2815503561f 60 teslaMeasureEvent = queueBundle.queueTesla->get(0);
mitea1 0:f2815503561f 61 proximityMeasureEvent = queueBundle.queueProximity->get(0);
mitea1 0:f2815503561f 62 gpsMeasureEvent = queueBundle.queueGps->get(0);
mitea1 0:f2815503561f 63 loraMeasureEvent = queueBundle.queueLoRaMeasurments->get(0);
mitea1 0:f2815503561f 64 }
mitea1 0:f2815503561f 65
mitea1 0:f2815503561f 66 void TaskDatahandler::forwardSensorMessages(){
mitea1 0:f2815503561f 67 std::string loraMessage;
mitea1 0:f2815503561f 68 std::vector<uint8_t> dataToSend;
mitea1 0:f2815503561f 69 std::vector<uint8_t> dataReceived;
mitea1 0:f2815503561f 70
mitea1 0:f2815503561f 71 int32_t ret;
mitea1 0:f2815503561f 72
mitea1 0:f2815503561f 73 debugSerial->printf("\n");
mitea1 0:f2815503561f 74 if (lightMeasureEvent.status == osEventMessage) {
mitea1 0:f2815503561f 75 MAX44009Message* luxMessage = (MAX44009Message*) lightMeasureEvent.value.p;
mitea1 0:f2815503561f 76 debugSerial->printf("%s\n",luxMessage->getLoRaMessageString());
mitea1 0:f2815503561f 77 loraMessage.append(luxMessage->getLoRaMessageString());
mitea1 0:f2815503561f 78 }
mitea1 0:f2815503561f 79
mitea1 0:f2815503561f 80 if (temperatureMeasureEvent.status == osEventMessage) {
mitea1 0:f2815503561f 81 BME280TemperatureMessage* temperatureMessage = (BME280TemperatureMessage*) temperatureMeasureEvent.value.p;
mitea1 0:f2815503561f 82 debugSerial->printf("%s\n",temperatureMessage->getLoRaMessageString());
mitea1 0:f2815503561f 83 loraMessage.append(temperatureMessage->getLoRaMessageString());
mitea1 0:f2815503561f 84 }
mitea1 0:f2815503561f 85
mitea1 0:f2815503561f 86 if (pressureMeasureEvent.status == osEventMessage) {
mitea1 0:f2815503561f 87 BME280PressureMessage* pressureMessage = (BME280PressureMessage*) pressureMeasureEvent.value.p;
mitea1 0:f2815503561f 88 debugSerial->printf("%s\n",pressureMessage->getLoRaMessageString());
mitea1 0:f2815503561f 89 loraMessage.append(pressureMessage->getLoRaMessageString());
mitea1 0:f2815503561f 90 }
mitea1 0:f2815503561f 91
mitea1 0:f2815503561f 92 if (humidityMeasureEvent.status == osEventMessage) {
mitea1 0:f2815503561f 93 BME280HumidityMessage* humidityMessage = (BME280HumidityMessage*) humidityMeasureEvent.value.p;
mitea1 0:f2815503561f 94 debugSerial->printf("%s\n",humidityMessage->getLoRaMessageString());
mitea1 0:f2815503561f 95 loraMessage.append(humidityMessage->getLoRaMessageString());
mitea1 0:f2815503561f 96 }
mitea1 0:f2815503561f 97
mitea1 0:f2815503561f 98 if (accelerationMeasureEvent.status == osEventMessage) {
mitea1 0:f2815503561f 99 MPU9250AccelerationMessage* accelerationMessage = (MPU9250AccelerationMessage*) accelerationMeasureEvent.value.p;
mitea1 0:f2815503561f 100 debugSerial->printf("%s\n",accelerationMessage->getLoRaMessageString());
mitea1 0:f2815503561f 101 loraMessage.append(accelerationMessage->getLoRaMessageString());
mitea1 0:f2815503561f 102 }
mitea1 0:f2815503561f 103
mitea1 0:f2815503561f 104 if (gyroscopeMeasureEvent.status == osEventMessage) {
mitea1 0:f2815503561f 105 MPU9250GyroscopeMessage* gyroscopeMessage = (MPU9250GyroscopeMessage*) gyroscopeMeasureEvent.value.p;
mitea1 0:f2815503561f 106 debugSerial->printf("%s\n",gyroscopeMessage->getLoRaMessageString());
mitea1 0:f2815503561f 107 loraMessage.append(gyroscopeMessage->getLoRaMessageString());
mitea1 0:f2815503561f 108 }
mitea1 0:f2815503561f 109
mitea1 0:f2815503561f 110 if (teslaMeasureEvent.status == osEventMessage) {
mitea1 0:f2815503561f 111 MPU9250TeslaMessage* teslaMessage = (MPU9250TeslaMessage*) teslaMeasureEvent.value.p;
mitea1 0:f2815503561f 112 debugSerial->printf("%s\n",teslaMessage->getLoRaMessageString());
mitea1 0:f2815503561f 113 loraMessage.append(teslaMessage->getLoRaMessageString());
mitea1 0:f2815503561f 114 }
mitea1 0:f2815503561f 115
mitea1 0:f2815503561f 116 if(proximityMeasureEvent.status == osEventMessage){
mitea1 0:f2815503561f 117 SI1143ProximityMessage* si1143ProximityMessage = (SI1143ProximityMessage*) proximityMeasureEvent.value.p;
mitea1 0:f2815503561f 118 debugSerial->printf("%s\n",si1143ProximityMessage->getLoRaMessageString());
mitea1 0:f2815503561f 119 loraMessage.append(si1143ProximityMessage->getLoRaMessageString());
mitea1 0:f2815503561f 120 }
mitea1 0:f2815503561f 121
mitea1 0:f2815503561f 122 if(gpsMeasureEvent.status == osEventMessage){
mitea1 0:f2815503561f 123 UBloxGPSMessage* uBloxGpsMessage = (UBloxGPSMessage*) gpsMeasureEvent.value.p;
mitea1 0:f2815503561f 124 debugSerial->printf("%s\n",uBloxGpsMessage->getLoRaMessageString());
mitea1 0:f2815503561f 125 loraMessage.append(uBloxGpsMessage->getLoRaMessageString());
mitea1 0:f2815503561f 126 }
mitea1 0:f2815503561f 127
mitea1 0:f2815503561f 128 if(loraMeasureEvent.status == osEventMessage){
mitea1 0:f2815503561f 129 LoRaMeasurementMessage* loraMeasurementMessage = (LoRaMeasurementMessage*) loraMeasureEvent.value.p;
mitea1 0:f2815503561f 130 debugSerial->printf("%s\n",loraMeasurementMessage->getLoRaMessageString());
mitea1 0:f2815503561f 131 loraMessage.append(loraMeasurementMessage->getLoRaMessageString());
mitea1 0:f2815503561f 132 }
mitea1 0:f2815503561f 133
mitea1 0:f2815503561f 134 debugSerial->printf("\n");
mitea1 0:f2815503561f 135
mitea1 0:f2815503561f 136 // format data for sending to the gateway
mitea1 0:f2815503561f 137 for (std::string::iterator it = loraMessage.begin(); it != loraMessage.end(); it++){
mitea1 0:f2815503561f 138 dataToSend.push_back((uint8_t) *it);
mitea1 0:f2815503561f 139 }
mitea1 0:f2815503561f 140 loraMessage.clear();
mitea1 0:f2815503561f 141
mitea1 0:f2815503561f 142 mutexLora->lock(osWaitForever);
mitea1 0:f2815503561f 143 lora->send(dataToSend);
mitea1 0:f2815503561f 144 // lora->recv(dataReceived);
mitea1 0:f2815503561f 145 mutexLora->unlock();
mitea1 0:f2815503561f 146
mitea1 0:f2815503561f 147 dataToSend.clear();
mitea1 0:f2815503561f 148 dataReceived.clear();
mitea1 0:f2815503561f 149
mitea1 0:f2815503561f 150 }
mitea1 0:f2815503561f 151
mitea1 0:f2815503561f 152 void TaskDatahandler::setMutex(Mutex* mutexLora){
mitea1 0:f2815503561f 153 this->mutexLora = mutexLora;
mitea1 0:f2815503561f 154 }
mitea1 0:f2815503561f 155
mitea1 0:f2815503561f 156 void TaskDatahandler::setQueueBundle(QueueBundle queueBundle){
mitea1 0:f2815503561f 157 this->queueBundle = queueBundle;
mitea1 0:f2815503561f 158 }
mitea1 0:f2815503561f 159
mitea1 0:f2815503561f 160 void TaskDatahandler::setPriority(osPriority priority){
mitea1 0:f2815503561f 161 this->priority = priority;
mitea1 0:f2815503561f 162 }
mitea1 0:f2815503561f 163
mitea1 0:f2815503561f 164 void TaskDatahandler::setStackSize(uint32_t stacksize){
mitea1 0:f2815503561f 165 this->stack_size = stacksize;
mitea1 0:f2815503561f 166 }
mitea1 0:f2815503561f 167
mitea1 0:f2815503561f 168 void TaskDatahandler::setStackPointer(unsigned char* stackPointer){
mitea1 0:f2815503561f 169 this->stack_pointer = stackPointer;
mitea1 0:f2815503561f 170 }
mitea1 0:f2815503561f 171
mitea1 0:f2815503561f 172 void TaskDatahandler::setDebugSerial(RawSerial* debugSerial){
mitea1 0:f2815503561f 173 this->debugSerial = debugSerial;
mitea1 0:f2815503561f 174 }
mitea1 0:f2815503561f 175
mitea1 0:f2815503561f 176 void TaskDatahandler::setLoRa(LoRa* lora){
mitea1 0:f2815503561f 177 this->lora = lora;
mitea1 0:f2815503561f 178 }
mitea1 0:f2815503561f 179
mitea1 0:f2815503561f 180 void TaskDatahandler::setState(TASK_STATE state){
mitea1 0:f2815503561f 181 this->state = state;
mitea1 0:f2815503561f 182 }
mitea1 0:f2815503561f 183
mitea1 0:f2815503561f 184 TASK_STATE TaskDatahandler::getState(){
mitea1 0:f2815503561f 185 return state;
mitea1 0:f2815503561f 186 }
mitea1 0:f2815503561f 187
mitea1 0:f2815503561f 188
mitea1 0:f2815503561f 189
mitea1 0:f2815503561f 190