A multifunctional and modular Firmware for Multitech's mDot based on ARM mBed provides a widerange of functionality for several Sensors such as MAX44009, BME280, MPU9250, SI1143 and uBlox. It allows you to quickly build a Sensornode that measures specific data with its sensors and sends it via LoRaWAN.

Dependencies:   mDot_LoRa_Sensornode_Flowmeter_impl mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TaskCommandHandler.cpp Source File

TaskCommandHandler.cpp

00001 /*
00002  * TaskCommandHandler.cpp
00003  *
00004  *  Created on: Sep 11, 2016
00005  *      Author: Adrian
00006  */
00007 
00008 #include "TaskCommandHandler.h "
00009 
00010 TaskCommandHandler::TaskCommandHandler(Queue<CommandMessage,COMMAND_QUEUE_LENGHT>* queue,
00011         osPriority priority, uint32_t stackSize, unsigned char* stackPointer){
00012     setQueue(queue);
00013     setPriority(priority);
00014     setStackSize(stackSize);
00015     setStackPointer(stackPointer);
00016     setState(SLEEPING);
00017 }
00018 
00019 TaskCommandHandler::~TaskCommandHandler() {
00020     // TODO Auto-generated destructor stub
00021 }
00022 
00023 osStatus TaskCommandHandler::start(){
00024     setState(RUNNING);
00025     this->thread = new rtos::Thread(callBack,this);
00026     attachIdleHook(NULL);
00027 }
00028 
00029 osStatus TaskCommandHandler::stop(){
00030     thread->terminate();
00031     setState(SLEEPING);
00032     delete this->thread;
00033 }
00034 
00035 void TaskCommandHandler::callBack(void const* data){
00036     // WOODHAMMER METHOD of Casting!
00037     const TaskCommandHandler* constInstance = static_cast<const TaskCommandHandler* >(data);
00038     TaskCommandHandler* instance = const_cast<TaskCommandHandler*>(constInstance);
00039 
00040     instance->handleCommands();
00041 }
00042 
00043 void TaskCommandHandler::attachIdleHook(void (*fptr) (void)){
00044     this->thread->attach_idle_hook(fptr);
00045 }
00046 
00047 void TaskCommandHandler::handleCommands(){
00048 
00049     while(true){
00050         getCommandMessages();
00051         processCommands();
00052         osDelay(COMMANDHANLDER_TASK_DELAY_MS);
00053     }
00054 }
00055 
00056 void TaskCommandHandler::getCommandMessages(){
00057     commandReceiveEvent = queue->get(0);
00058 }
00059 
00060 void TaskCommandHandler::processCommands(){
00061 
00062     debugSerial->printf("\n");
00063     if (commandReceiveEvent.status == osEventMessage) {
00064 
00065         CommandMessage* commandMessage = (CommandMessage*) commandReceiveEvent.value.p;
00066 //       Do your own stuff according to the received command
00067 //       For example turn on LED if 0x00 was sent or turn it off if 0x01 was sent
00068 //      DigitalOut* pinD6 = new DigitalOut(PA_1);
00069 //
00070 //      switch(commandMessage->getCommandHex()){
00071 //
00072 //      case LORA_COMMAND_ACTION_0:
00073 //          pinD6->write(0);
00074 //          break;
00075 //
00076 //      case LORA_COMMAND_ACTION_1:
00077 //          pinD6->write(1);
00078 //          break;
00079 //
00080 //      }
00081 
00082         debugSerial->printf("Received Command: %s\n",commandMessage->getCommandString().c_str());
00083 
00084     }
00085 
00086 }
00087 
00088 void TaskCommandHandler::setQueue(Queue<CommandMessage,COMMAND_QUEUE_LENGHT>* queueCommand){
00089     this->queue = queueCommand;
00090 }
00091 
00092 void TaskCommandHandler::setPriority(osPriority priority){
00093     this->priority = priority;
00094 }
00095 
00096 void TaskCommandHandler::setStackSize(uint32_t stacksize){
00097     this->stack_size = stacksize;
00098 }
00099 
00100 void TaskCommandHandler::setStackPointer(unsigned char* stackPointer){
00101     this->stack_pointer = stackPointer;
00102 }
00103 
00104 void TaskCommandHandler::setDebugSerial(RawSerial* debugSerial){
00105     this->debugSerial = debugSerial;
00106 }
00107 
00108 void TaskCommandHandler::setState(TASK_STATE state){
00109     this->state = state;
00110 }
00111 
00112 TASK_STATE TaskCommandHandler::getState(){
00113     return state;
00114 }
00115 
00116 
00117 
00118 
00119 
00120