firmware/message_queue.c

Go to the documentation of this file.
00001 
00010 #include <stdint.h>
00011 #include "message_queue.h"
00012 #include "config_message_queue_impl.h"
00013 
00015 typedef struct S_messageQueue_GlobalData {
00016     messageQueue_QueuedMessage queue[messageQueue_Size]; 
00017     messageQueue_SizeType begin; 
00018     messageQueue_SizeType end; 
00019 } messageQueue_GlobalData;
00020 
00022 static volatile messageQueue_GlobalData m_data;
00023 
00029 static inline messageQueue_SizeType messageQueue_next(messageQueue_SizeType value) {
00030     value++;
00031     if(value >= messageQueue_Size) {
00032         /* messageQueue is used circular */
00033         value= 0;
00034     }
00035     return value;
00036 }
00037 
00041 void messageQueue_init(void) {
00042     m_data.begin= 0;
00043     m_data.end= 0;
00044 }
00045 
00049 void messageQueue_cleanup(void)
00050 {}
00051 
00056 Boolean messageQueue_isEmpty(void) {
00057     return boolean(m_data.begin == m_data.end);
00058 }
00059 
00064 Boolean messageQueue_isFull(void) {
00065     return boolean(messageQueue_next(m_data.end) == m_data.begin);
00066 }
00067 
00074 Boolean messageQueue_read(messageQueue_QueuedMessage* pMessage) {
00075     Boolean success= !messageQueue_isEmpty();
00076     if(success) {
00077         *pMessage= m_data.queue[m_data.begin];
00078         m_data.begin= messageQueue_next(m_data.begin);
00079     }
00080     return success;
00081 }
00082 
00088 Boolean messageQueue_write(messageQueue_QueuedMessage message) {
00089     Boolean success= !messageQueue_isFull();
00090     if(success) {
00091         m_data.queue[m_data.end]= message;
00092         m_data.end= messageQueue_next(m_data.end);
00093     }
00094     return success;
00095 }

Generated on Mon Oct 2 19:31:17 2006 for USB-LED-Fader by  doxygen 1.4.7