![](/media/cache/profiles/bfe3d668a830f1ad9c3a627efecf14e7.jpg.50x50_q85.jpg)
lora sensnode
Dependencies: libmDot mbed-rtos mbed
Fork of mDot_LoRa_Sensornode by
app/TaskDatahandler.cpp@1:e67174cc4953, 2016-08-10 (annotated)
- 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?
User | Revision | Line number | New 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 |