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
TaskFlowMeter.cpp
00001 /* 00002 * TaskFlowMeter.cpp 00003 * 00004 * Created on: 23.10.2018 00005 * Author: Adrian 00006 */ 00007 00008 #include "TaskFlowMeter.h" 00009 00010 TaskFlowMeter::TaskFlowMeter(FlowMeter* flowMeter, Mutex* mutex, Queue<FlowMeterMessage,FLOWMETER_QUEUE_LENGTH>* queue) { 00011 this->flowMeter = flowMeter; 00012 setMutex(mutex); 00013 setQueue(queue); 00014 } 00015 TaskFlowMeter::TaskFlowMeter(FlowMeter* flowMeter, Mutex* mutex, Queue<FlowMeterMessage,FLOWMETER_QUEUE_LENGTH>* queue, 00016 osPriority priority, uint32_t stackSize, unsigned char* stackPointer){ 00017 this->flowMeter = flowMeter; 00018 setMutex(mutex); 00019 setQueue(queue); 00020 setPriority(priority); 00021 setStackSize(stackSize); 00022 setStackPointer(stackPointer); 00023 setState(SLEEPING); 00024 } 00025 00026 TaskFlowMeter::~TaskFlowMeter() { 00027 // TODO Auto-generated destructor stub 00028 } 00029 00030 osStatus TaskFlowMeter::start(){ 00031 this->setState(RUNNING); 00032 this->thread = new rtos::Thread(callBack,this); 00033 } 00034 00035 osStatus TaskFlowMeter::stop(){ 00036 thread->terminate(); 00037 setState(SLEEPING); 00038 delete this->thread; 00039 } 00040 00041 void TaskFlowMeter::callBack(void const* data){ 00042 // WOODHAMMER METHOD of Casting! 00043 const TaskFlowMeter* constInstance = static_cast<const TaskFlowMeter* >(data); 00044 TaskFlowMeter* instance = const_cast<TaskFlowMeter*>(constInstance); 00045 00046 instance->measure(); 00047 } 00048 00049 void TaskFlowMeter::attachIdleHook(void (*fptr) (void)){ 00050 this->thread->attach_idle_hook(fptr); 00051 } 00052 00053 void TaskFlowMeter::measure(){ 00054 FlowMeterMessage flowMeterMessage; 00055 00056 while(true){ 00057 mutexFlowMeter->lock(osWaitForever); 00058 flowMeterMessage.setCurrentFlowrate(flowMeter->getCurrentFlowrate()); 00059 flowMeterMessage.setCurrentVolume(flowMeter->getCurrentVolume()); 00060 flowMeterMessage.setTotalFlowrate(flowMeter->getTotalFlowrate()); 00061 flowMeterMessage.setTotalVolume(flowMeter->getTotalVolume()); 00062 mutexFlowMeter->unlock(); 00063 00064 queue->put(&flowMeterMessage,osWaitForever); 00065 osDelay(FLOWMETER__TASK_DELAY_MS); 00066 } 00067 } 00068 00069 void TaskFlowMeter::setQueue(Queue<FlowMeterMessage,FLOWMETER_QUEUE_LENGTH>* queueFlowMeter){ 00070 this->queue = queueFlowMeter; 00071 } 00072 00073 void TaskFlowMeter::setMutex(Mutex* mutex){ 00074 this->mutexFlowMeter = mutex; 00075 } 00076 00077 void TaskFlowMeter::setPriority(osPriority priority){ 00078 this->priority = priority; 00079 } 00080 00081 void TaskFlowMeter::setStackSize(uint32_t stackSize){ 00082 this->stack_size = stackSize; 00083 } 00084 00085 void TaskFlowMeter::setStackPointer(unsigned char* stackPointer){ 00086 this->stack_pointer = stackPointer; 00087 } 00088 00089 void TaskFlowMeter::setState(TASK_STATE taskState){ 00090 this->state = taskState; 00091 } 00092 00093 TASK_STATE TaskFlowMeter::getState(){ 00094 return this->state; 00095 }
Generated on Tue Jul 12 2022 21:35:27 by 1.7.2