msgQSmLibP.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* msgQSmLibP.h - private shared message queue library header file */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01g,17apr98,rlp  canceled SM_MSG_Q modification for backward compatibility.
  7. 01f,04nov97,rlp  modified SM_MSG_Q structure for tracking messages sent.
  8. 01e,29jan93,pme  added little endian support
  9. 01d,29sep92,pme  added msgQSmNumMsgs(), msgQSmSend(), msgQSmReceived()
  10.  and msgQSmInfoGet() functions prototypes. 
  11. 01c,22sep92,rrr  added support for c++
  12. 01b,17sep92,pme  added shared message queue info get support.
  13. 01a,19jul92,pme  written.
  14. */
  15. #ifndef __INCmsgQSmLibPh
  16. #define __INCmsgQSmLibPh
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. #include "vxWorks.h"
  21. #include "vwModNum.h"
  22. #include "msgQSmLib.h"
  23. #include "smDllLib.h"
  24. #include "private/semSmLibP.h"
  25. /* defines */
  26. #define MSG_Q_TYPE_SM  10 /* shared message queue */
  27. #if (defined (CPU_FAMILY) && (CPU_FAMILY==I960) && (defined __GNUC__))
  28. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  29. #endif  /* CPU_FAMILY==I960 */
  30. /* typedefs */
  31. typedef struct sm_msg_q                 /* SM_MSG_Q */
  32.     {
  33.     UINT32              verify;         /* msgQ verification */
  34.     UINT32 objType; /* msgQ type */
  35.     SM_SEMAPHORE        msgQSem;        /* msgQ shared counting semaphore */
  36.     UINT32              msgQLock;       /* spinlock for msgQ */
  37.     SM_DL_LIST          msgQ;           /* message queue head */
  38.     SM_SEMAPHORE        freeQSem;       /* freeQ shared counting semaphore */
  39.     UINT32              freeQLock;      /* spinlock for freeQ */
  40.     SM_DL_LIST          freeQ;          /* free message queue head */
  41.     UINT32              options;        /* message queue options */
  42.     UINT32              maxMsgs;        /* max number of messages in queue */
  43.     UINT32              maxMsgLength;   /* max length of message */
  44.     UINT32              sendTimeouts;   /* number of send timeouts */
  45.     UINT32              recvTimeouts;   /* number of receive timeouts */
  46.     } SM_MSG_Q;
  47. typedef struct  sm_msg_node             /* SM_MSG_NODE */
  48.     {
  49.     SM_DL_NODE          node;           /* queue node */
  50.     int                 msgLength;      /* number of bytes of data */
  51.     } SM_MSG_NODE;
  52. #if (defined (CPU_FAMILY) && (CPU_FAMILY==I960) && (defined __GNUC__))
  53. #pragma align 0                 /* turn off alignment requirement */
  54. #endif  /* CPU_FAMILY==I960 */
  55. #define SM_MSG_NODE_DATA(pNode)   (((char *) pNode) + sizeof (SM_MSG_NODE))
  56. /* variable declarations */
  57. extern FUNCPTR msgQSmShowRtn; /* shared msgQ show routine ptr */
  58. extern FUNCPTR msgQSmInfoGetRtn; /* shared msgQ info get routine ptr */
  59. /* function declarations */
  60. #if defined(__STDC__) || defined(__cplusplus)
  61. extern void   msgQSmLibInit (void);
  62. extern STATUS msgQSmInit (SM_MSG_Q * pMsgQ, int maxMsgs, int maxMsgLength,
  63.   int options, void * pMsgPool);
  64. extern STATUS msgQSmShow (SM_MSG_Q_ID msgQId, int level);
  65. extern STATUS msgQSmInfoGet (SM_MSG_Q_ID smMsgQId, MSG_Q_INFO * pInfo);
  66. extern int    msgQSmNumMsgs (SM_MSG_Q_ID msgQId);
  67. extern int    msgQSmReceive (SM_MSG_Q_ID msgQId, char *buffer,
  68.                              UINT maxNBytes, int timeout);
  69. extern STATUS msgQSmSend (SM_MSG_Q_ID msgQId, char *buffer, UINT nBytes,
  70.                           int timeout, int priority);
  71. #else   /* __STDC__ */
  72. extern void   msgQSmLibInit ();
  73. extern STATUS msgQSmInit ();
  74. extern STATUS msgQSmShow ();
  75. extern STATUS msgQSmInfoGet ();
  76. extern int    msgQSmNumMsgs ();
  77. extern int    msgQSmReceive ();
  78. extern STATUS msgQSmSend ();
  79. #endif  /* __STDC__ */
  80. #ifdef __cplusplus
  81. }
  82. #endif
  83. #endif /* __INCmsgQSmLibPh */