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
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
Generated on Tue Jul 12 2022 21:35:27 by 1.7.2