/* * kernel.c * * Created on: 13.09.2011 * Author: Roland */ #include "Types.h" #include "FreeRTOS.h" #include "queue.h" #define kernel_TASK_PRIORITY ( tskIDLE_PRIORITY + 5 ) #define kernel_TASK_STACK_SIZE ( ( unsigned short ) 64 ) /* Globals */ static Task_Param_t kernel_Param; /* * Wake up other tasks, send them messages telling what to do, * wait for them to have processed the commands or not, maybe * put them to sleep again, ... * */ static void kernel_Process_Task(void *Param) { Message_t Msg; Message_t SndMsg; portTickType tick; portCHAR chBufCam[10] = "Seas Cam!"; portCHAR chBufLSen[10] = "Seas LSe!"; if(NULL == kernel_Param.QueueHandles.hxq_Kernel) { return; } tick = xTaskGetTickCount(); while(1) { vTaskDelayUntil(&tick, MS(3)); if( xQueueReceive( kernel_Param.QueueHandles.hxq_Kernel, &Msg, MS(5))) { /* * switch Msg.Sender and act accordingly. */ switch (Msg.Sender) { case Sender_Camera: { SndMsg.Sender = Sender_Kernel; SndMsg.pData = chBufCam; xQueueSend(kernel_Param.QueueHandles.hxq_Camera, &SndMsg, MS(10)); } case Sender_LightSens: { SndMsg.Sender = Sender_Kernel; SndMsg.pData = chBufLSen; xQueueSend(kernel_Param.QueueHandles.hxq_LightSens, &SndMsg, MS(10)); } default: {;} } } } } Status_t kernel_Init_Kernel(QH_t hxQueues) { portBASE_TYPE xResult; xResult = xTaskCreate( kernel_Process_Task, (signed char *) "Kernel", kernel_TASK_STACK_SIZE, &kernel_Param, kernel_TASK_PRIORITY, &(kernel_Param.hxTask_Self) ); kernel_Param.QueueHandles = hxQueues; /*TODO: check for success and pass it over to caller. */ return STATUS_OK; }