/* * Copyright (c) 2008-2016 Allwinner Technology Co. Ltd. * All rights reserved. * * File : CdxMessageQueue.h * Description : message queue * History : * */ #ifndef MESSAGE_QUEUE_H #define MESSAGE_QUEUE_H #include #include #ifdef __cplusplus extern "C" { #endif typedef struct MessageQueueContext XmMessageQueue; #ifndef uintptr_t typedef size_t uintptr_t; #endif //typedef void (*msgHandlerT)(XmMessage *msg, void *arg); typedef struct XmMessage { int messageId; sem_t* psem_reply; uintptr_t params[4]; // msgHandlerT execute; }XmMessage; /** * @param nMaxMessageNum How many messages the message queue can hold * @param pName The name of the message queue which is used in log output * @param nMessageSize sizeof(struct AwMessage) */ XmMessageQueue* aw_message_queue_create(int nMaxMessageNum, const char* pName); void aw_message_queue_destroy(XmMessageQueue* mq); int aw_message_queue_postMessage(XmMessageQueue* mq, XmMessage* m); int aw_message_queue_waitMessage(XmMessageQueue* mq, int64_t timeout); int aw_message_queue_getMessage(XmMessageQueue* mq, XmMessage* m); //* timeout: ms int aw_message_queue_tryGetMessage(XmMessageQueue* mq, XmMessage* m, int64_t timeout_ms); int aw_message_queue_flush(XmMessageQueue* mq); int aw_message_queue_getCount(XmMessageQueue* mq); //* define a semaphore timedwait method for common use. int aw_rt_SemTimedWait(sem_t* sem, int64_t time_ms); #ifdef __cplusplus } #endif #endif