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
00131 #ifndef ti_ipc_MessageQ__include
00132 #define ti_ipc_MessageQ__include
00133
00134 #include <ti/ipc/MultiProc.h>
00135
00136 #if defined (__cplusplus)
00137 extern "C" {
00138 #endif
00139
00140
00141
00142
00143
00144
00149 #define MessageQ_S_BUSY 2
00150
00155 #define MessageQ_S_ALREADYSETUP 1
00156
00161 #define MessageQ_S_SUCCESS 0
00162
00167 #define MessageQ_E_FAIL -1
00168
00173 #define MessageQ_E_INVALIDARG -2
00174
00179 #define MessageQ_E_MEMORY -3
00180
00185 #define MessageQ_E_ALREADYEXISTS -4
00186
00191 #define MessageQ_E_NOTFOUND -5
00192
00197 #define MessageQ_E_TIMEOUT -6
00198
00203 #define MessageQ_E_INVALIDSTATE -7
00204
00209 #define MessageQ_E_OSFAILURE -8
00210
00215 #define MessageQ_E_RESOURCE -9
00216
00221 #define MessageQ_E_RESTART -10
00222
00227 #define MessageQ_E_INVALIDMSG -11
00228
00233 #define MessageQ_E_NOTOWNER -12
00234
00239 #define MessageQ_E_REMOTEACTIVE -13
00240
00245 #define MessageQ_E_INVALIDHEAPID -14
00246
00251 #define MessageQ_E_INVALIDPROCID -15
00252
00257 #define MessageQ_E_MAXREACHED -16
00258
00263 #define MessageQ_E_UNREGISTEREDHEAPID -17
00264
00269 #define MessageQ_E_CANNOTFREESTATICMSG -18
00270
00275 #define MessageQ_E_UNBLOCKED -19
00276
00277
00278
00279
00280
00281
00285 #define MessageQ_FOREVER ~(0)
00286
00290 #define MessageQ_INVALIDMSGID 0xffff
00291
00295 #define MessageQ_INVALIDMESSAGEQ 0xffff
00296
00300 #define MessageQ_PRIORITYMASK 0x3
00301
00312 #define MessageQ_getDstQueue(msg) \
00313 (msg->dstId == (MessageQ_QueueIndex)MessageQ_INVALIDMESSAGEQ) ? \
00314 (MessageQ_QueueId)MessageQ_INVALIDMESSAGEQ : \
00315 (MessageQ_QueueId)(((MessageQ_QueueId)MultiProc_self() << 16u) \
00316 | (((MessageQ_Msg) (msg))->dstId))
00317
00318
00333 #define MessageQ_getMsgId(msg) (((MessageQ_Msg) (msg))->msgId)
00334
00343 #define MessageQ_getMsgSize(msg) (((MessageQ_Msg) (msg))->msgSize)
00344
00350 #define MessageQ_getMsgPri(msg) \
00351 ((((MessageQ_Msg) (msg))->flags & MessageQ_PRIORITYMASK))
00352
00370 #define MessageQ_getReplyQueue(msg) \
00371 (MessageQ_QueueId)((((MessageQ_Msg) (msg))->replyProc << 16u) \
00372 | ((MessageQ_Msg)(msg))->replyId)
00373
00386 #define MessageQ_setMsgId(msg, id) ((MessageQ_Msg) (msg))->msgId = id
00387
00394 #define MessageQ_setMsgPri(msg, priority) \
00395 (((MessageQ_Msg) (msg))->flags = (priority & MessageQ_PRIORITYMASK))
00396
00397
00398
00399
00400
00401
00406 typedef UInt32 MessageQ_QueueId;
00407
00411 typedef UInt16 MessageQ_QueueIndex;
00412
00416 typedef struct MessageQ_Object *MessageQ_Handle;
00417
00421 typedef struct {
00422 Void *synchronizer;
00431 } MessageQ_Params;
00432
00436 typedef struct {
00437 Bits32 reserved0;
00438 Bits32 reserved1;
00439 Bits32 msgSize;
00440 Bits16 flags;
00441 Bits16 msgId;
00442 Bits16 dstId;
00443 Bits16 dstProc;
00444 Bits16 replyId;
00445 Bits16 replyProc;
00446 Bits16 srcProc;
00447 Bits16 heapId;
00448 Bits16 seqNum;
00449 Bits16 reserved;
00450 } MessageQ_MsgHeader;
00451
00455 typedef MessageQ_MsgHeader *MessageQ_Msg;
00456
00460 typedef enum {
00461 MessageQ_NORMALPRI = 0,
00462 MessageQ_HIGHPRI = 1,
00463 MessageQ_RESERVEDPRI = 2,
00464 MessageQ_URGENTPRI = 3
00465 } MessageQ_Priority;
00466
00467
00468
00469
00470
00471
00472
00478 Void MessageQ_Params_init(MessageQ_Params *params);
00479
00488 MessageQ_Handle MessageQ_create(String name, const MessageQ_Params *params);
00489
00495 Int MessageQ_delete(MessageQ_Handle *handlePtr);
00496
00514 Int MessageQ_open(String name, MessageQ_QueueId *queueId);
00515
00525 Int MessageQ_close(MessageQ_QueueId *queueId);
00526
00546 MessageQ_Msg MessageQ_alloc(UInt16 heapId, UInt32 size);
00547
00557 Int MessageQ_free(MessageQ_Msg msg);
00558
00584 Int MessageQ_registerHeap(Ptr heap, UInt16 heapId);
00585
00598 Int MessageQ_unregisterHeap(UInt16 heapId);
00599
00610 Void MessageQ_setMsgTrace(MessageQ_Msg msg, Bool traceFlag);
00611
00634 Void MessageQ_staticMsgInit(MessageQ_Msg msg, UInt32 size);
00635
00636
00637
00638
00639
00640
00669 Int MessageQ_get(MessageQ_Handle handle, MessageQ_Msg *msg, UInt timeout);
00670
00699 Int MessageQ_put(MessageQ_QueueId queueId, MessageQ_Msg msg);
00700
00710 Int MessageQ_count(MessageQ_Handle handle);
00711
00722 UInt16 MessageQ_getProcId(MessageQ_Handle handle);
00723
00735 UInt32 MessageQ_getQueueId(MessageQ_Handle handle);
00736
00754 Void MessageQ_setReplyQueue(MessageQ_Handle handle, MessageQ_Msg msg);
00755
00782 Void MessageQ_unblock(MessageQ_Handle handle);
00783
00784 #if defined (__cplusplus)
00785 }
00786 #endif
00787 #endif
00788
00789
00790
00791
00792
00793
00794
00795