39 #include "utils/wrap_stdint.h" 148 uint8_t *GetFirstData(
void) {
return mBuffer.mHead.mData; }
156 const uint8_t *GetFirstData(
void)
const {
return mBuffer.mHead.mData; }
164 uint8_t *GetData(
void) {
return mBuffer.mData; }
172 const uint8_t *GetData(
void)
const {
return mBuffer.mData; }
176 kBufferDataSize = kBufferSize -
sizeof(
struct otMessage),
177 kHeadBufferDataSize = kBufferDataSize -
sizeof(
struct MessageInfo),
185 uint8_t mData[kHeadBufferDataSize];
187 uint8_t mData[kBufferDataSize];
206 kTypeMacDataPoll = 2,
207 kTypeSupervision = 3,
213 kSubTypeMleAnnounce = 1,
214 kSubTypeMleDiscoverRequest = 2,
215 kSubTypeMleDiscoverResponse = 3,
216 kSubTypeJoinerEntrust = 4,
217 kSubTypeMplRetransmission = 5,
218 kSubTypeMleGeneral = 6,
219 kSubTypeJoinerFinalizeResponse = 7,
220 kSubTypeMleChildUpdateRequest = 8,
228 kPriorityVeryLow = 3,
252 uint16_t
GetLength(
void)
const {
return mBuffer.mHead.mInfo.mLength; }
263 otError SetLength(uint16_t aLength);
269 uint8_t GetBufferCount(
void)
const;
277 uint16_t
GetOffset(
void)
const {
return mBuffer.mHead.mInfo.mOffset; }
288 otError MoveOffset(
int aDelta);
299 otError SetOffset(uint16_t aOffset);
307 uint8_t
GetType(
void)
const {
return mBuffer.mHead.mInfo.mType; }
315 void SetType(uint8_t aType) { mBuffer.mHead.mInfo.mType = aType; }
323 uint8_t
GetSubType(
void)
const {
return mBuffer.mHead.mInfo.mSubType; }
331 void SetSubType(uint8_t aSubType) { mBuffer.mHead.mInfo.mSubType = aSubType; }
340 bool IsSubTypeMle(
void)
const;
348 uint8_t
GetPriority(
void)
const {
return mBuffer.mHead.mInfo.mPriority; }
361 otError SetPriority(uint8_t aPriority);
375 otError Prepend(
const void *aBuf, uint16_t aLength);
385 otError RemoveHeader(uint16_t aLength);
399 otError Append(
const void *aBuf, uint16_t aLength);
411 uint16_t Read(uint16_t aOffset, uint16_t aLength,
void *aBuf)
const;
423 int Write(uint16_t aOffset, uint16_t aLength,
const void *aBuf);
436 int CopyTo(uint16_t aSourceOffset, uint16_t aDestinationOffset, uint16_t aLength,
Message &aMessage)
const;
449 Message *Clone(uint16_t aLength)
const;
484 bool GetChildMask(uint8_t aChildIndex)
const;
492 void ClearChildMask(uint8_t aChildIndex);
500 void SetChildMask(uint8_t aChildIndex);
509 bool IsChildPending(
void)
const;
519 uint16_t
GetPanId(
void)
const {
return mBuffer.mHead.mInfo.mPanIdChannel.mPanId; }
529 void SetPanId(uint16_t aPanId) { mBuffer.mHead.mInfo.mPanIdChannel.mPanId = aPanId; }
539 uint8_t
GetChannel(
void)
const {
return mBuffer.mHead.mInfo.mPanIdChannel.mChannel; }
549 void SetChannel(uint8_t aChannel) { mBuffer.mHead.mInfo.mPanIdChannel.mChannel = aChannel; }
557 uint8_t
GetTimeout(
void)
const {
return mBuffer.mHead.mInfo.mTimeout; }
565 void SetTimeout(uint8_t aTimeout) { mBuffer.mHead.mInfo.mTimeout = aTimeout; }
581 void SetInterfaceId(int8_t aInterfaceId) { mBuffer.mHead.mInfo.mInterfaceId = aInterfaceId; }
629 void AddRss(int8_t aRss) { mBuffer.mHead.mInfo.mRssAverager.Add(aRss); }
637 int8_t
GetAverageRss(
void)
const {
return mBuffer.mHead.mInfo.mRssAverager.GetAverage(); }
656 static uint16_t UpdateChecksum(uint16_t aChecksum, uint16_t aValue);
668 static uint16_t UpdateChecksum(uint16_t aChecksum,
const void *aBuf, uint16_t aLength);
680 uint16_t UpdateChecksum(uint16_t aChecksum, uint16_t aOffset, uint16_t aLength)
const;
689 return (!mBuffer.mHead.mInfo.mInPriorityQ) ? mBuffer.mHead.mInfo.mQueue.mMessage : NULL;
700 MessagePool *GetMessagePool(
void)
const {
return mBuffer.mHead.mInfo.mMessagePool; }
708 void SetMessagePool(
MessagePool *aMessagePool) { mBuffer.mHead.mInfo.mMessagePool = aMessagePool; }
716 bool IsInAQueue(
void)
const {
return (mBuffer.mHead.mInfo.mQueue.mMessage != NULL); }
733 return (mBuffer.mHead.mInfo.mInPriorityQ) ? mBuffer.mHead.mInfo.mQueue.mPriority : NULL;
752 Message *&Next(uint8_t aList) {
return mBuffer.mHead.mInfo.mNext[aList]; }
762 Message *
const &Next(uint8_t aList)
const {
return mBuffer.mHead.mInfo.mNext[aList]; }
772 Message *&Prev(uint8_t aList) {
return mBuffer.mHead.mInfo.mPrev[aList]; }
780 uint16_t GetReserved(
void)
const {
return mBuffer.mHead.mInfo.mReserved; }
788 void SetReserved(uint16_t aReservedHeader) { mBuffer.mHead.mInfo.mReserved = aReservedHeader; }
799 otError ResizeMessage(uint16_t aLength);
879 void GetInfo(uint16_t &aMessageCount, uint16_t &aBufferCount)
const;
889 Message *GetTail(
void)
const {
return static_cast<Message *
>(mData); }
897 void SetTail(
Message *aMessage) { mData = aMessage; }
906 void AddToList(uint8_t aListId,
Message &aMessage) { AddToList(aListId, aMessage, kQueuePositionTail); }
925 void RemoveFromList(uint8_t aListId,
Message &aMessage);
962 Message *GetHeadForPriority(uint8_t aPriority)
const;
993 void GetInfo(uint16_t &aMessageCount, uint16_t &aBufferCount)
const;
1012 void AddToList(uint8_t aListId,
Message &aMessage);
1021 void RemoveFromList(uint8_t aListId,
Message &aMessage);
1031 uint8_t PrevPriority(uint8_t aPriority)
const {
1044 Message *FindFirstNonNullTail(uint8_t aStartPriorityLevel)
const;
1155 Message *New(uint8_t aType, uint16_t aReserveHeader);
1172 Iterator GetAllMessagesHead(
void)
const;
1189 #if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT 1202 void FreeBuffers(
Buffer *aBuffer);
1203 otError ReclaimBuffers(
int aNumBuffers);
1204 PriorityQueue *GetAllMessagesQueue(
void) {
return &mAllQueue; }
1206 #if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT == 0 1207 uint16_t mNumFreeBuffers;
1208 Buffer mBuffers[kNumBuffers];
1222 #endif // MESSAGE_HPP_ otError Enqueue(Message &aMessage)
This method adds a message to the end of the list.
Definition: message.hpp:847
uint16_t otPlatMessagePoolNumFreeBuffers(otInstance *aInstance)
Get the number of free buffers.
This class represents a Message buffer.
Definition: message.hpp:122
This type represents all the static / global variables used by OpenThread allocated in one place...
Definition: openthread-instance.h:59
Identifies the all messages list (maintained by the MessagePool).
Definition: message.hpp:81
Message * GetMessage(void) const
This method returns the associated message with the iterator.
Definition: message.hpp:1083
This file includes the platform abstraction for the message pool.
void SetDirectTransmission(void)
This method schedules forwarding using direct transmission.
Definition: message.hpp:602
int8_t GetAverageRss(void) const
This method returns the average RSS (Received Signal Strength) associated with the message...
Definition: message.hpp:637
This class represents an iterator for iterating through all queued message from this pool...
Definition: message.hpp:1067
uint8_t mChildMask[8]
A bit-vector to indicate which sleepy children need to receive this.
Definition: message.hpp:101
This class implements a message queue.
Definition: message.hpp:806
uint16_t mLength
Number of bytes within the message.
Definition: message.hpp:96
union ot::MessageInfo::@14 mPanIdChannel
Used for MLE Discover Request, Response, and Announce messages.
void SetPanId(uint16_t aPanId)
This method sets the IEEE 802.15.4 Destination PAN ID.
Definition: message.hpp:529
uint8_t mSubType
Identifies the message sub type.
Definition: message.hpp:111
Iterator(void)
This constructor initializes an empty iterator.
Definition: message.hpp:1075
void SetSubType(uint8_t aSubType)
This method sets the message sub type.
Definition: message.hpp:331
bool mDirectTx
Used to indicate whether a direct transmission is required.
Definition: message.hpp:112
uint8_t GetTimeout(void) const
This method returns the timeout used for 6LoWPAN reassembly.
Definition: message.hpp:557
This file includes definitions for locator class for OpenThread objects.
Iterator & GoToPrev(void)
This method moves the current iterator to the previous message on the list.
Definition: message.hpp:1129
uint16_t mPanId
Used for MLE Discover Request and Response messages.
Definition: message.hpp:106
uint16_t GetLength(void) const
This method returns the number of bytes in the message.
Definition: message.hpp:252
uint16_t GetFreeBufferCount(void) const
This method returns the number of free buffers.
Definition: message.hpp:1192
This structure contains metdata about a Message.
Definition: message.hpp:77
This file is a wrapper for the standard "string.h" file Some platforms provide all required functions...
int8_t GetInterfaceId(void) const
This method returns the interface ID.
Definition: message.hpp:573
Indicates the head (front) of the list.
Definition: message.hpp:820
Iterator GetPrev(void) const
This method returns a new iterator corresponding to previous message on the list. ...
Definition: message.hpp:1113
uint8_t mTimeout
Seconds remaining before dropping the message.
Definition: message.hpp:102
void SetDatagramTag(uint16_t aTag)
This method sets the datagram tag used for 6LoWPAN fragmentation.
Definition: message.hpp:473
void SetChannel(uint8_t aChannel)
This method sets the IEEE 802.15.4 Channel to use for transmission.
Definition: message.hpp:549
This file defines the top-level OpenThread APIs related to message buffer and queues.
PriorityQueue * mPriority
Identifies the priority queue (if any) where this message is queued.
Definition: message.hpp:92
This type points to an OpenThread message buffer.
Definition: types.h:479
#define OPENTHREAD_CONFIG_MESSAGE_BUFFER_SIZE
The size of a message buffer in bytes.
Definition: openthread-core-default-config.h:105
bool IsLinkSecurityEnabled(void) const
This method indicates whether or not link security is enabled for the message.
Definition: message.hpp:611
uint8_t mType
Identifies the type of message.
Definition: message.hpp:110
MessageQueue * mMessage
Identifies the message queue (if any) where this message is queued.
Definition: message.hpp:91
bool mLinkSecurity
Indicates whether or not link security is enabled.
Definition: message.hpp:113
class Buffer * GetNextBuffer(void) const
This method returns a pointer to the next message buffer.
Definition: message.hpp:133
uint8_t GetType(void) const
This method returns the type of the message.
Definition: message.hpp:307
RssAverager mRssAverager
The averager maintaining the received signal strength (RSS) average.
Definition: message.hpp:99
Low priority level.
Definition: message.hpp:227
Message * mNext[kNumLists]
A pointer to the next Message in a doubly linked list.
Definition: message.hpp:86
MessageQueue * GetMessageQueue(void) const
This method returns a pointer to the message queue (if any) where this message is queued...
Definition: message.hpp:688
void ClearDirectTransmission(void)
This method unschedules forwarding using direct transmission.
Definition: message.hpp:596
Indicates the tail (end) of the list.
Definition: message.hpp:821
const RssAverager & GetRssAverager(void) const
This method returns a const reference to RssAverager of the message.
Definition: message.hpp:645
uint16_t mOffset
A byte offset within the message.
Definition: message.hpp:97
This class represents a message pool.
Definition: message.hpp:1055
This file includes definitions for generating and processing IEEE 802.15.4 MAC frames.
uint16_t GetOffset(void) const
This method returns the byte offset within the message.
Definition: message.hpp:277
uint8_t GetSubType(void) const
This method returns the sub type of the message.
Definition: message.hpp:323
union ot::MessageInfo::@13 mQueue
Identifies the queue (if any) where this message is queued.
#define OPENTHREAD_CONFIG_NUM_MESSAGE_BUFFERS
The number of message buffers in the buffer pool.
Definition: openthread-core-default-config.h:95
This class represents a message.
Definition: message.hpp:195
uint16_t GetDatagramTag(void) const
This method returns the datagram tag used for 6LoWPAN fragmentation.
Definition: message.hpp:465
int8_t mInterfaceId
The interface ID.
Definition: message.hpp:103
uint16_t mDatagramTag
The datagram tag used for 6LoWPAN fragmentation.
Definition: message.hpp:98
Iterator & GoToNext(void)
This method moves the current iterator to the next message on the list.
Definition: message.hpp:1121
void SetLinkSecurityEnabled(bool aEnabled)
This method sets whether or not link security is enabled for the message.
Definition: message.hpp:619
Message * Clone(void) const
This method creates a copy of the current Message.
Definition: message.hpp:457
MessagePool * mMessagePool
Identifies the message pool for this message.
Definition: message.hpp:88
Identifies the list for per-interface message queue.
Definition: message.hpp:82
bool mInPriorityQ
Indicates whether the message is queued in normal or priority queue.
Definition: message.hpp:115
bool IsEmpty(void) const
This method returns true if the iterator is empty (i.e., associated with a NULL message) ...
Definition: message.hpp:1090
This class implements locator for otInstance object.
Definition: locator.hpp:63
void SetTimeout(uint8_t aTimeout)
This method sets the timeout used for 6LoWPAN reassembly.
Definition: message.hpp:565
uint16_t mReserved
Number of header bytes reserved for the message.
Definition: message.hpp:95
Iterator GetNext(void) const
This method returns a new iterator corresponding to next message on the list.
Definition: message.hpp:1105
This class implements a priority queue.
Definition: message.hpp:932
uint8_t mChannel
Used for MLE Announce.
Definition: message.hpp:107
Number of priority levels.
Definition: message.hpp:230
void SetNextBuffer(class Buffer *buf)
This method sets the pointer to the next message buffer.
Definition: message.hpp:139
void AddRss(int8_t aRss)
This method updates the average RSS (Received Signal Strength) associated with the message by adding ...
Definition: message.hpp:629
uint8_t GetChannel(void) const
This method returns the IEEE 802.15.4 Channel to use for transmission.
Definition: message.hpp:539
void SetInterfaceId(int8_t aInterfaceId)
This method sets the interface ID.
Definition: message.hpp:581
bool GetDirectTransmission(void) const
This method returns whether or not message forwarding is scheduled for direct transmission.
Definition: message.hpp:590
uint8_t GetPriority(void) const
This method returns the message priority level.
Definition: message.hpp:348
uint16_t GetPanId(void) const
This method returns the IEEE 802.15.4 Destination PAN ID.
Definition: message.hpp:519
Number of lists.
Definition: message.hpp:83
void SetType(uint8_t aType)
This method sets the message type.
Definition: message.hpp:315
QueuePosition
This enumeration represents a position (head or tail) in the queue.
Definition: message.hpp:818
Iterator GetAllMessagesTail(void) const
This method returns a pointer to the last message (head) in the all-messages list.
Definition: message.hpp:1181
Message * mPrev[kNumLists]
A pointer to the previous Message in a doubly linked list.
Definition: message.hpp:87
otError
This enumeration represents error codes used throughout OpenThread.
Definition: types.h:107
This file includes compile-time configuration constants for OpenThread.
This structure represents an OpenThread message queue.
Definition: message.h:235
This file includes definitions for storing and processing link quality information.
bool HasEnded(void) const
This method returns true if the iterator has ended (beyond the last message on list).
Definition: message.hpp:1097
This file includes macros for validating runtime conditions.