diff options
Diffstat (limited to 'kernel.soso/message.c')
-rw-r--r-- | kernel.soso/message.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/kernel.soso/message.c b/kernel.soso/message.c new file mode 100644 index 00000000..729cff9e --- /dev/null +++ b/kernel.soso/message.c @@ -0,0 +1,51 @@ +#include "message.h" +#include "process.h" +#include "fifobuffer.h" + + +void sendMesage(Thread* thread, SosoMessage* message) +{ + Spinlock_Lock(&(thread->messageQueueLock)); + + FifoBuffer_enqueue(thread->messageQueue, (uint8*)message, sizeof(SosoMessage)); + + Spinlock_Unlock(&(thread->messageQueueLock)); +} + +uint32 getMessageQueueCount(Thread* thread) +{ + int result = 0; + + Spinlock_Lock(&(thread->messageQueueLock)); + + result = FifoBuffer_getSize(thread->messageQueue) / sizeof(SosoMessage); + + Spinlock_Unlock(&(thread->messageQueueLock)); + + return result; +} + +//returns remaining message count +int32 getNextMessage(Thread* thread, SosoMessage* message) +{ + uint32 result = -1; + + Spinlock_Lock(&(thread->messageQueueLock)); + + result = FifoBuffer_getSize(thread->messageQueue) / sizeof(SosoMessage); + + if (result > 0) + { + FifoBuffer_dequeue(thread->messageQueue, (uint8*)message, sizeof(SosoMessage)); + + --result; + } + else + { + result = -1; + } + + Spinlock_Unlock(&(thread->messageQueueLock)); + + return result; +} |