Improve Platform MessagePool support. (#1171)

This commit is contained in:
pvanhorn
2017-01-19 16:04:08 -08:00
committed by Jonathan Hui
parent ab13e718c6
commit a3e9e33678
3 changed files with 33 additions and 13 deletions
+12 -5
View File
@@ -63,14 +63,13 @@ extern "C" {
#endif
/**
* Initialize the platform implemented message pool with the provided buffer list.
* Initialize the platform implemented message pool.
*
* @param[in] aFreeBufferList A linked list of free buffers.
* @param[in] aNumFreeBuffers A pointer to an int containing the number of free buffers in aFreeBufferList.
* @param[in] aBufferSize The size in bytes of a Buffer object.
* @param[in] aMinNumFreeBuffers An int containing the minimum number of free buffers desired by OpenThread.
* @param[in] aBufferSize The size in bytes of a Buffer object.
*
*/
void otPlatMessagePoolInit(struct BufferHeader *aFreeBufferList, int *aNumFreeBuffers, size_t aBufferSize);
void otPlatMessagePoolInit(int aMinNumFreeBuffers, size_t aBufferSize);
/**
* Allocate a buffer from the platform managed buffer pool.
@@ -88,6 +87,14 @@ struct BufferHeader *otPlatMessagePoolNew(void);
*/
void otPlatMessagePoolFree(struct BufferHeader *aBuffer);
/**
* Get the number of free buffers.
*
* @returns The number of buffers currently free and available to OpenThread.
*
*/
int otPlatMessagePoolNumFreeBuffers(void);
#ifdef __cplusplus
} // extern "C"
#endif
+15 -8
View File
@@ -44,6 +44,10 @@ namespace Thread {
MessagePool::MessagePool(void) :
mAllQueue()
{
#if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT
// Initialize Platform buffer pool management.
otPlatMessagePoolInit(kNumBuffers, sizeof(Buffer));
#else
memset(mBuffers, 0, sizeof(mBuffers));
mFreeBuffers = mBuffers;
@@ -55,11 +59,6 @@ MessagePool::MessagePool(void) :
mBuffers[kNumBuffers - 1].SetNextBuffer(NULL);
mNumFreeBuffers = kNumBuffers;
#if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT
// Pass the list of free buffers and a pointer to the count of free buffers
// to the platform for management.
otPlatMessagePoolInit(static_cast<BufferHeader *>(mFreeBuffers), &mNumFreeBuffers, sizeof(Buffer));
#endif
}
@@ -109,7 +108,7 @@ Buffer *MessagePool::NewBuffer(void)
otLogInfoMac("No available message buffer\n");
}
#else // OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT
#else
if (mFreeBuffers == NULL)
{
@@ -121,7 +120,7 @@ Buffer *MessagePool::NewBuffer(void)
mFreeBuffers = mFreeBuffers->GetNextBuffer();
buffer->SetNextBuffer(NULL);
mNumFreeBuffers--;
#endif // OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT
#endif
exit:
return buffer;
@@ -149,7 +148,15 @@ ThreadError MessagePool::FreeBuffers(Buffer *aBuffer)
ThreadError MessagePool::ReclaimBuffers(int aNumBuffers)
{
return (aNumBuffers <= mNumFreeBuffers) ? kThreadError_None : kThreadError_NoBufs;
int numFreeBuffers;
#if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT
numFreeBuffers = otPlatMessagePoolNumFreeBuffers();
#else
numFreeBuffers = mNumFreeBuffers;
#endif
return (aNumBuffers <= numFreeBuffers) ? kThreadError_None : kThreadError_NoBufs;
}
Message *MessagePool::Iterator::Next(void) const
+6
View File
@@ -1091,7 +1091,11 @@ public:
* @returns The number of free buffers.
*
*/
#if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT
uint16_t GetFreeBufferCount(void) const { return static_cast<uint16_t>(otPlatMessagePoolNumFreeBuffers()); }
#else
uint16_t GetFreeBufferCount(void) const { return static_cast<uint16_t>(mNumFreeBuffers); }
#endif
private:
enum
@@ -1104,9 +1108,11 @@ private:
ThreadError ReclaimBuffers(int aNumBuffers);
PriorityQueue *GetAllMessagesQueue(void) { return &mAllQueue; }
#if OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT == 0
int mNumFreeBuffers;
Buffer mBuffers[kNumBuffers];
Buffer *mFreeBuffers;
#endif
PriorityQueue mAllQueue;
};