RTOS lib used for Eurobot 2012

Dependents:   Eurobot2012_Secondary Team_Sprint2 Team_Sprint2 Rafi_Final ... more

Committer:
narshu
Date:
Tue Aug 07 10:24:02 2012 +0000
Revision:
0:e477ba491a3b
[mbed] converted /Eurobot_2012_Secondary/rtos

Who changed what in which revision?

UserRevisionLine numberNew contents of line
narshu 0:e477ba491a3b 1 /* Copyright (c) 2012 mbed.org */
narshu 0:e477ba491a3b 2 #ifndef QUEUE_H
narshu 0:e477ba491a3b 3 #define QUEUE_H
narshu 0:e477ba491a3b 4
narshu 0:e477ba491a3b 5 #include <stdint.h>
narshu 0:e477ba491a3b 6 #include <string.h>
narshu 0:e477ba491a3b 7
narshu 0:e477ba491a3b 8 #include "cmsis_os.h"
narshu 0:e477ba491a3b 9 #include "error.h"
narshu 0:e477ba491a3b 10
narshu 0:e477ba491a3b 11 namespace rtos {
narshu 0:e477ba491a3b 12
narshu 0:e477ba491a3b 13 /*! The Queue class allow to control, send, receive, or wait for messages.
narshu 0:e477ba491a3b 14 A message can be a integer or pointer value to a certain type T that is send
narshu 0:e477ba491a3b 15 to a thread or interrupt service routine.
narshu 0:e477ba491a3b 16 \tparam T data type of a single message element.
narshu 0:e477ba491a3b 17 \tparam queue_sz maximum number of messages in queue.
narshu 0:e477ba491a3b 18 */
narshu 0:e477ba491a3b 19 template<typename T, uint32_t queue_sz>
narshu 0:e477ba491a3b 20 class Queue {
narshu 0:e477ba491a3b 21 public:
narshu 0:e477ba491a3b 22 /*! Create and initialise a message Queue. */
narshu 0:e477ba491a3b 23 Queue() {
narshu 0:e477ba491a3b 24 #ifdef CMSIS_OS_RTX
narshu 0:e477ba491a3b 25 memset(_queue_q, 0, sizeof(_queue_q));
narshu 0:e477ba491a3b 26 _queue_def.pool = _queue_q;
narshu 0:e477ba491a3b 27 _queue_def.queue_sz = queue_sz;
narshu 0:e477ba491a3b 28 #endif
narshu 0:e477ba491a3b 29 _queue_id = osMessageCreate(&_queue_def, NULL);
narshu 0:e477ba491a3b 30 if (_queue_id == NULL) {
narshu 0:e477ba491a3b 31 error("Error initialising the queue object\n");
narshu 0:e477ba491a3b 32 }
narshu 0:e477ba491a3b 33 }
narshu 0:e477ba491a3b 34
narshu 0:e477ba491a3b 35 /*! Put a message in a Queue.
narshu 0:e477ba491a3b 36 \param data message pointer.
narshu 0:e477ba491a3b 37 \param millisec timeout value or 0 in case of no time-out. (default: 0)
narshu 0:e477ba491a3b 38 \return status code that indicates the execution status of the function.
narshu 0:e477ba491a3b 39 */
narshu 0:e477ba491a3b 40 osStatus put(T* data, uint32_t millisec=0) {
narshu 0:e477ba491a3b 41 return osMessagePut(_queue_id, (uint32_t)data, millisec);
narshu 0:e477ba491a3b 42 }
narshu 0:e477ba491a3b 43
narshu 0:e477ba491a3b 44 /*! Get a message or Wait for a message from a Queue.
narshu 0:e477ba491a3b 45 \param millisec timeout value or 0 in case of no time-out. (default: osWaitForever).
narshu 0:e477ba491a3b 46 \return event information that includes the message and the status code.
narshu 0:e477ba491a3b 47 */
narshu 0:e477ba491a3b 48 osEvent get(uint32_t millisec=osWaitForever) {
narshu 0:e477ba491a3b 49 return osMessageGet(_queue_id, millisec);
narshu 0:e477ba491a3b 50 }
narshu 0:e477ba491a3b 51
narshu 0:e477ba491a3b 52 private:
narshu 0:e477ba491a3b 53 osMessageQId _queue_id;
narshu 0:e477ba491a3b 54 osMessageQDef_t _queue_def;
narshu 0:e477ba491a3b 55 #ifdef CMSIS_OS_RTX
narshu 0:e477ba491a3b 56 uint32_t _queue_q[4+(queue_sz)];
narshu 0:e477ba491a3b 57 #endif
narshu 0:e477ba491a3b 58 };
narshu 0:e477ba491a3b 59
narshu 0:e477ba491a3b 60 }
narshu 0:e477ba491a3b 61 #endif