SRK Version of mDot LoRa_Sensormode_SRK

Dependencies:   libmDot mbed-rtos mbed

Fork of mDot_LoRa_Sensornode by Adrian Mitevski

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TaskAcceleration.cpp Source File

TaskAcceleration.cpp

00001 /*
00002  * TaskAcceleration.cpp
00003  *
00004  *  Created on: May 30, 2016
00005  *      Author: Adrian
00006  */
00007 
00008 #include "TaskAcceleration.h "
00009 
00010 TaskAcceleration::TaskAcceleration(MPU9250* mpu9250,Mutex* mutexI2C, Queue<MPU9250AccelerationMessage,ACCELERATION_QUEUE_LENGHT>* queue){
00011     this->mpu9250 = mpu9250;
00012     setPriority(osPriorityNormal);
00013     setStackSize(DEFAULT_STACK_SIZE);
00014     setStackPointer(NULL);
00015     setMutex(mutexI2C);
00016     setQueue(queue);
00017 }
00018 
00019 TaskAcceleration::TaskAcceleration(MPU9250* mpu9250,rtos::Mutex* mutexI2C,rtos::Queue<MPU9250AccelerationMessage,ACCELERATION_QUEUE_LENGHT>* queue,
00020     osPriority priority, uint32_t stackSize, unsigned char *stackPointer){
00021     this->mpu9250 = mpu9250;
00022     setPriority(priority);
00023     setStackSize(stackSize);
00024     setStackPointer(stackPointer);
00025     setMutex(mutexI2C);
00026     setQueue(queue);
00027     setState(SLEEPING);
00028 }
00029 
00030 TaskAcceleration::~TaskAcceleration() {
00031     // TODO Auto-generated destructor stub
00032 }
00033 
00034 osStatus TaskAcceleration::start(){
00035     setState(RUNNING);
00036     this->thread = new rtos::Thread(callBack,this);
00037 }
00038 
00039 osStatus TaskAcceleration::stop(){
00040     thread->terminate();
00041     setState(SLEEPING);
00042     delete this->thread;
00043 }
00044 
00045 void TaskAcceleration::callBack(void const* data){
00046     // WOODHAMMER METHOD of Casting!
00047     const TaskAcceleration* constInstance = static_cast<const TaskAcceleration* >(data);
00048     TaskAcceleration* instance = const_cast<TaskAcceleration*>(constInstance);
00049 
00050     instance->measureAcceleration();
00051 }
00052 
00053 void TaskAcceleration::measureAcceleration(){
00054     MPU9250AccelerationMessage mpu9250AccelerationMessage;
00055 
00056     while(true){
00057         mutexI2C->lock(osWaitForever);
00058         mpu9250AccelerationMessage.setXAcceleration(mpu9250->getXAxisAcceleration());
00059         mpu9250AccelerationMessage.setYAcceleration(mpu9250->getYAxisAcceleration());
00060         mpu9250AccelerationMessage.setZAcceleration(mpu9250->getZAxisAcceleration());
00061         mutexI2C->unlock();
00062 
00063         queue->put(&mpu9250AccelerationMessage,osWaitForever);
00064         osDelay(ACCELERATION_TASK_DELAY_MS);
00065     }
00066 
00067 
00068 }
00069 
00070 void TaskAcceleration::setQueue(Queue<MPU9250AccelerationMessage,ACCELERATION_QUEUE_LENGHT>* queue){
00071     this->queue = queue;
00072 }
00073 
00074 void TaskAcceleration::setMutex(Mutex* mutex){
00075     this->mutexI2C = mutex;
00076 }
00077 
00078 void TaskAcceleration::setPriority(osPriority priority){
00079     this->priority = priority;
00080 }
00081 
00082 void TaskAcceleration::setStackSize(uint32_t stacksize){
00083     this->stack_size = stacksize;
00084 }
00085 
00086 void TaskAcceleration::setStackPointer(unsigned char* stackPointer){
00087     this->stack_pointer = stackPointer;
00088 }
00089 
00090 void TaskAcceleration::setState(TASK_STATE state){
00091     this->state = state;
00092 }
00093 
00094 TASK_STATE TaskAcceleration::getState(){
00095     return state;
00096 }
00097