F´ Flight Software - C/C++ Documentation  NASA-v1.5.0
A framework for building embedded system applications to NASA flight quality standards.
Queue.hpp
Go to the documentation of this file.
1 
12 #ifndef _Queue_hpp_
13 #define _Queue_hpp_
14 
15 #include <Fw/Types/BasicTypes.hpp>
16 #include <Fw/Obj/ObjBase.hpp>
18 #include <Os/QueueString.hpp>
19 
20 namespace Os {
21  // forward declaration for registry
22  class QueueRegistry;
23 
24  class Queue {
25  public:
26 
27  typedef enum {
39 
40  typedef enum {
44 
45  Queue();
46  virtual ~Queue();
47  QueueStatus create(const Fw::StringBase &name, NATIVE_INT_TYPE depth, NATIVE_INT_TYPE msgSize);
48 
49  // Send serialized buffers
50  QueueStatus send(const Fw::SerializeBufferBase &buffer, NATIVE_INT_TYPE priority, QueueBlocking block);
52 
53  // Send raw buffers
54  QueueStatus send(const U8* buffer, NATIVE_INT_TYPE size, NATIVE_INT_TYPE priority, QueueBlocking block);
55  QueueStatus receive(U8* buffer, NATIVE_INT_TYPE capacity, NATIVE_INT_TYPE &actualSize, NATIVE_INT_TYPE &priority, QueueBlocking block);
56 
57  NATIVE_INT_TYPE getNumMsgs(void) const;
58  NATIVE_INT_TYPE getMaxMsgs(void) const;
59  NATIVE_INT_TYPE getQueueSize(void) const;
60  NATIVE_INT_TYPE getMsgSize(void) const;
61  const QueueString& getName(void);
62  static NATIVE_INT_TYPE getNumQueues(void);
63 #if FW_QUEUE_REGISTRATION
64  static void setQueueRegistry(QueueRegistry* reg); // !< set the queue registry
65 #endif
66 
67  protected:
69  POINTER_CAST m_handle;
71 #if FW_QUEUE_REGISTRATION
72  static QueueRegistry* s_queueRegistry;
73 #endif
75 
76  private:
77  Queue(Queue&);
78  Queue(Queue*);
79  };
80 
81  class QueueRegistry {
82  public:
83  virtual void regQueue(Queue* obj)=0;
84  virtual ~QueueRegistry();
85  };
86 }
87 
88 #endif
Os::Queue::getName
const QueueString & getName(void)
get the queue name
Definition: QueueCommon.cpp:61
Os
Definition: File.cpp:7
Os::Queue::create
QueueStatus create(const Fw::StringBase &name, NATIVE_INT_TYPE depth, NATIVE_INT_TYPE msgSize)
create a message queue
Definition: QueueCommon.cpp:41
Os::Queue::QUEUE_FULL
@ QUEUE_FULL
queue was full when attempting to send a message
Definition: Queue.hpp:36
Fw::SerializeBufferBase
Definition: Serializable.hpp:43
Serializable.hpp
Fw::StringBase
Definition: StringType.hpp:23
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Os::Queue::QueueStatus
QueueStatus
Definition: Queue.hpp:27
Os::Queue::getQueueSize
NATIVE_INT_TYPE getQueueSize(void) const
get the queue depth (maximum number of messages queue can hold)
Definition: Queue.cpp:249
Os::Queue::m_handle
POINTER_CAST m_handle
handle for implementation specific queue
Definition: Queue.hpp:69
Os::QueueRegistry::~QueueRegistry
virtual ~QueueRegistry()
virtual destructor for registry object
Os::Queue::QUEUE_EMPTY_BUFFER
@ QUEUE_EMPTY_BUFFER
supplied buffer is empty
Definition: Queue.hpp:35
Os::Queue::QUEUE_INVALID_PRIORITY
@ QUEUE_INVALID_PRIORITY
invalid priority requested
Definition: Queue.hpp:34
Os::Queue::send
QueueStatus send(const Fw::SerializeBufferBase &buffer, NATIVE_INT_TYPE priority, QueueBlocking block)
send a message
Definition: QueueCommon.cpp:13
Os::Queue::Queue
Queue()
Definition: Queue.cpp:39
QueueString.hpp
Os::Queue::QUEUE_SIZE_MISMATCH
@ QUEUE_SIZE_MISMATCH
attempted to send or receive with buffer too large, too small
Definition: Queue.hpp:31
Os::Queue::QueueBlocking
QueueBlocking
Definition: Queue.hpp:40
Os::Queue::receive
QueueStatus receive(Fw::SerializeBufferBase &buffer, NATIVE_INT_TYPE &priority, QueueBlocking block)
receive a message
Definition: QueueCommon.cpp:22
Os::QueueRegistry
Definition: Queue.hpp:81
Os::QueueString
Definition: QueueString.hpp:10
Os::Queue::QUEUE_UNINITIALIZED
@ QUEUE_UNINITIALIZED
Queue wasn't initialized successfully.
Definition: Queue.hpp:30
Os::Queue::m_name
QueueString m_name
queue name
Definition: Queue.hpp:70
Os::Queue::QUEUE_NO_MORE_MSGS
@ QUEUE_NO_MORE_MSGS
If non-blocking, all the messages have been drained.
Definition: Queue.hpp:29
Os::Queue::getMsgSize
NATIVE_INT_TYPE getMsgSize(void) const
get the message size (maximum message size queue can hold)
Definition: Queue.cpp:260
Os::Queue::getNumMsgs
NATIVE_INT_TYPE getNumMsgs(void) const
get the number of messages in the queue
Definition: Queue.cpp:227
Os::Queue::QUEUE_OK
@ QUEUE_OK
message sent/received okay
Definition: Queue.hpp:28
Os::Queue::s_numQueues
static NATIVE_INT_TYPE s_numQueues
tracks number of queues in the system
Definition: Queue.hpp:74
Os::QueueRegistry::regQueue
virtual void regQueue(Queue *obj)=0
method called by queue init() methods to register a new queue
Os::Queue::QUEUE_RECEIVE_ERROR
@ QUEUE_RECEIVE_ERROR
message receive error
Definition: Queue.hpp:33
Os::Queue::QUEUE_UNKNOWN_ERROR
@ QUEUE_UNKNOWN_ERROR
Unexpected error; can't match with returns.
Definition: Queue.hpp:37
Os::Queue::QUEUE_NONBLOCKING
@ QUEUE_NONBLOCKING
Queue receive always returns even if there is no message.
Definition: Queue.hpp:42
Os::Queue::getNumQueues
static NATIVE_INT_TYPE getNumQueues(void)
get the number of queues in the system
Definition: QueueCommon.cpp:57
Os::Queue::QUEUE_SEND_ERROR
@ QUEUE_SEND_ERROR
message send error
Definition: Queue.hpp:32
ObjBase.hpp
Declarations for Fw::ObjBase and Fw::ObjRegistry.
Os::Queue::getMaxMsgs
NATIVE_INT_TYPE getMaxMsgs(void) const
get the maximum number of messages (high watermark)
Definition: Queue.cpp:238
Os::Queue::createInternal
QueueStatus createInternal(const Fw::StringBase &name, NATIVE_INT_TYPE depth, NATIVE_INT_TYPE msgSize)
create a message queue
Definition: Queue.cpp:51
BasicTypes.hpp
Declares ISF basic types.
Os::Queue::~Queue
virtual ~Queue()
Definition: Queue.cpp:76
NATIVE_INT_TYPE
int NATIVE_INT_TYPE
native integer type declaration
Definition: BasicTypes.hpp:29
Os::Queue
Definition: Queue.hpp:24
Os::Queue::QUEUE_BLOCKING
@ QUEUE_BLOCKING
Queue receive blocks until a message arrives.
Definition: Queue.hpp:41