IC Eurobot 2012 Program published from Shuto's account

Dependents:   Eurobot2012_Primary

Committer:
narshu
Date:
Tue Aug 07 10:25:51 2012 +0000
Revision:
0:62626fd22b30
[mbed] converted /Eurobot_2012_Primary/rtos

Who changed what in which revision?

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