00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00136 #ifndef ti_ipc_MessageQ__include
00137 #define ti_ipc_MessageQ__include
00138
00139 #include <ti/ipc/MultiProc.h>
00140
00141 #if defined (__cplusplus)
00142 extern "C" {
00143 #endif
00144
00145
00146
00147
00148
00149
00154 #define MessageQ_S_BUSY 2
00155
00160 #define MessageQ_S_ALREADYSETUP 1
00161
00166 #define MessageQ_S_SUCCESS 0
00167
00172 #define MessageQ_E_FAIL -1
00173
00178 #define MessageQ_E_INVALIDARG -2
00179
00184 #define MessageQ_E_MEMORY -3
00185
00190 #define MessageQ_E_ALREADYEXISTS -4
00191
00196 #define MessageQ_E_NOTFOUND -5
00197
00202 #define MessageQ_E_TIMEOUT -6
00203
00208 #define MessageQ_E_INVALIDSTATE -7
00209
00214 #define MessageQ_E_OSFAILURE -8
00215
00220 #define MessageQ_E_RESOURCE -9
00221
00226 #define MessageQ_E_RESTART -10
00227
00232 #define MessageQ_E_INVALIDMSG -11
00233
00238 #define MessageQ_E_NOTOWNER -12
00239
00244 #define MessageQ_E_REMOTEACTIVE -13
00245
00250 #define MessageQ_E_INVALIDHEAPID -14
00251
00256 #define MessageQ_E_INVALIDPROCID -15
00257
00262 #define MessageQ_E_MAXREACHED -16
00263
00268 #define MessageQ_E_UNREGISTEREDHEAPID -17
00269
00274 #define MessageQ_E_CANNOTFREESTATICMSG -18
00275
00280 #define MessageQ_E_UNBLOCKED -19
00281
00282
00283
00284
00285
00286
00290 #define MessageQ_FOREVER ~(0)
00291
00295 #define MessageQ_INVALIDMSGID 0xffff
00296
00300 #define MessageQ_INVALIDMESSAGEQ 0xffff
00301
00305 #define MessageQ_PRIORITYMASK 0x3
00306
00317 #define MessageQ_getDstQueue(msg) \
00318 (msg->dstId == (MessageQ_QueueIndex)MessageQ_INVALIDMESSAGEQ) ? \
00319 (MessageQ_QueueId)MessageQ_INVALIDMESSAGEQ : \
00320 (MessageQ_QueueId)(((MessageQ_QueueId)MultiProc_self() << 16u) \
00321 | (((MessageQ_Msg) (msg))->dstId))
00322
00323
00338 #define MessageQ_getMsgId(msg) (((MessageQ_Msg) (msg))->msgId)
00339
00348 #define MessageQ_getMsgSize(msg) (((MessageQ_Msg) (msg))->msgSize)
00349
00355 #define MessageQ_getMsgPri(msg) \
00356 ((((MessageQ_Msg) (msg))->flags & MessageQ_PRIORITYMASK))
00357
00368 #define MessageQ_getProcId(queueId) \
00369 ((UInt16)(queueId >> 16))
00370
00388 #define MessageQ_getReplyQueue(msg) \
00389 (MessageQ_QueueId)((((MessageQ_Msg) (msg))->replyProc << 16u) \
00390 | ((MessageQ_Msg)(msg))->replyId)
00391
00404 #define MessageQ_setMsgId(msg, id) ((MessageQ_Msg) (msg))->msgId = id
00405
00412 #define MessageQ_setMsgPri(msg, priority) \
00413 (((MessageQ_Msg) (msg))->flags = (priority & MessageQ_PRIORITYMASK))
00414
00415
00416
00417
00418
00419
00424 typedef UInt32 MessageQ_QueueId;
00425
00429 typedef UInt16 MessageQ_QueueIndex;
00430
00434 typedef struct MessageQ_Object *MessageQ_Handle;
00435
00439 typedef struct {
00440 Void *synchronizer;
00449 } MessageQ_Params;
00450
00454 typedef struct {
00455 Bits32 reserved0;
00456 Bits32 reserved1;
00457 Bits32 msgSize;
00458 Bits16 flags;
00459 Bits16 msgId;
00460 Bits16 dstId;
00461 Bits16 dstProc;
00462 Bits16 replyId;
00463 Bits16 replyProc;
00464 Bits16 srcProc;
00465 Bits16 heapId;
00466 Bits16 seqNum;
00467 Bits16 reserved;
00468 } MessageQ_MsgHeader;
00469
00473 typedef MessageQ_MsgHeader *MessageQ_Msg;
00474
00478 typedef enum {
00479 MessageQ_NORMALPRI = 0,
00480 MessageQ_HIGHPRI = 1,
00481 MessageQ_RESERVEDPRI = 2,
00482 MessageQ_URGENTPRI = 3
00483 } MessageQ_Priority;
00484
00485
00486
00487
00488
00489
00490
00496 Void MessageQ_Params_init(MessageQ_Params *params);
00497
00514 MessageQ_Handle MessageQ_create(String name, const MessageQ_Params *params);
00515
00529 Int MessageQ_delete(MessageQ_Handle *handlePtr);
00530
00548 Int MessageQ_open(String name, MessageQ_QueueId *queueId);
00549
00561 Int MessageQ_close(MessageQ_QueueId *queueId);
00562
00582 MessageQ_Msg MessageQ_alloc(UInt16 heapId, UInt32 size);
00583
00595 Int MessageQ_free(MessageQ_Msg msg);
00596
00624 Int MessageQ_registerHeap(Ptr heap, UInt16 heapId);
00625
00639 Int MessageQ_unregisterHeap(UInt16 heapId);
00640
00651 Void MessageQ_setMsgTrace(MessageQ_Msg msg, Bool traceFlag);
00652
00675 Void MessageQ_staticMsgInit(MessageQ_Msg msg, UInt32 size);
00676
00677
00678
00679
00680
00681
00710 Int MessageQ_get(MessageQ_Handle handle, MessageQ_Msg *msg, UInt timeout);
00711
00740 Int MessageQ_put(MessageQ_QueueId queueId, MessageQ_Msg msg);
00741
00751 Int MessageQ_count(MessageQ_Handle handle);
00752
00765 UInt32 MessageQ_getQueueId(MessageQ_Handle handle);
00766
00784 Void MessageQ_setReplyQueue(MessageQ_Handle handle, MessageQ_Msg msg);
00785
00812 Void MessageQ_unblock(MessageQ_Handle handle);
00813
00814 #if defined (__cplusplus)
00815 }
00816 #endif
00817 #endif
00818
00819
00820
00821
00822
00823
00824
00825