⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgqdistlibp.h

📁 VxWorks源码
💻 H
字号:
/* msgQDistLibP.h - distributed message queue library private hdr (VxFusion) *//* Copyright 1999 Wind River Systems, Inc. *//*modification history--------------------01e,24may99,drm  added vxfusion prefix to VxFusion related includes01d,19feb99,drm  added remoteError member to send/receive _INQ packets01c,21may98,drm  removed redundant #include statement01b,08may98,ur   removed 8 bit node id restriction01a,06jun97,ur   written*/#ifndef __INCmsgQDistLibPh#define __INCmsgQDistLibPh#ifdef __cplusplusextern "C" {#endif#include "vxWorks.h"#include "sllLib.h"#include "msgQLib.h"#include "private/semLibP.h"#include "vxfusion/private/distNodeLibP.h"#include "vxfusion/private/distPktLibP.h"#include "vxfusion/private/distObjLibP.h"/* defines */#define msgQDistTblLock()		semTake(&msgQDistTblLock, WAIT_FOREVER)#define msgQDistTblUnlock()		semGive(&msgQDistTblLock)#define IS_DIST_MSG_Q_OBJ(pObjNode) \	((pObjNode)->objNodeType == DIST_OBJ_TYPE_MSG_Q)/* DIST_MSG_Q_ID looks like this: |----tblIx-or-grpId----|-type-| */#define DIST_MSG_Q_TYPE_SHIFT		1#define DIST_MSG_Q_TYPE_MSG_Q		0x0		/* message queue */#define DIST_MSG_Q_TYPE_MSG_Q_GRP	0x1		/* message queue group */#define IS_DIST_MSG_Q_TYPE_GRP(distMsgQId) \	(((distMsgQId) & ((1 << DIST_MSG_Q_TYPE_SHIFT) - 1)) == \	 DIST_MSG_Q_TYPE_MSG_Q_GRP)/* message queue service */#define DIST_MSG_Q_SERV_NAME			"tServMsgQ"#define DIST_MSG_Q_SERV_TASK_PRIO		50#define DIST_MSG_Q_SERV_TASK_STACK_SZ	5000#define DIST_MSG_Q_SERV_NET_PRIO		0#define DIST_MSG_Q_WAIT_TASK_PRIO		50#define DIST_MSG_Q_WAIT_TASK_STACK_SZ	5000/* priority stuff */#define DIST_MSG_PRI_MASK				(0x07)#define DIST_MSG_Q_PRIO_VERIFY(msgQPrio) \	(((msgQPrio) == MSG_PRI_URGENT) || \	 ((msgQPrio) == MSG_PRI_NORMAL) || \	 (((msgQPrio) >= DIST_MSG_PRI_0) && ((msgQPrio) <= DIST_MSG_PRI_7)))#define DIST_MSG_Q_PRIO_TO_NET_PRIO(msgQPrio) \	(((msgQPrio) == MSG_PRI_URGENT) ? \		((int) (DIST_MSG_PRI_0 & DIST_MSG_PRI_MASK)) : \	 ((msgQPrio) == MSG_PRI_NORMAL) ? \		((int) (DIST_MSG_PRI_4 & DIST_MSG_PRI_MASK)) : \	 ((int) ((msgQPrio) & DIST_MSG_PRI_MASK)))#define DIST_MSG_Q_PRIO_TO_MSG_Q_PRIO(msgQPrio) \	(((msgQPrio) == MSG_PRI_URGENT) ? MSG_PRI_URGENT : \	 ((msgQPrio) == MSG_PRI_NORMAL) ? MSG_PRI_NORMAL : \	 (((msgQPrio) <= DIST_MSG_PRI_3) ?  MSG_PRI_URGENT : MSG_PRI_NORMAL))#define NET_PRIO_TO_DIST_MSG_Q_PRIO(netPrio) \	(((netPrio) <= 3) ?  MSG_PRI_URGENT : MSG_PRI_NORMAL)/* packet subtypes of DIST_PKT_TYPE_MSG_Q */#define DIST_PKT_TYPE_MSG_Q_SEND			0	/* send a message */#define DIST_PKT_TYPE_MSG_Q_RECV_REQ		1	/* ask for a message */#define DIST_PKT_TYPE_MSG_Q_RECV_RPL		2	/* return message */#define DIST_PKT_TYPE_MSG_Q_NUM_MSGS_REQ	3	/* ask for num messages */#define DIST_PKT_TYPE_MSG_Q_NUM_MSGS_RPL	4	/* reply with num messages */#define DIST_PKT_TYPE_MSG_Q_STATUS			64	/* status */#define DIST_MSG_Q_INQ_TYPE_NUM_MSGS		((0 << 8) | DIST_MSG_Q_INQ)#define DIST_MSG_Q_INQ_TYPE_RECV			((1 << 8) | DIST_MSG_Q_INQ)#define DIST_MSG_Q_INQ_TYPE_SEND			((2 << 8) | DIST_MSG_Q_INQ)#define MSG_Q_DIST_STATUS_OK				OK	/* OK--no error */#define MSG_Q_DIST_STATUS_ERROR				1	/* general error */#define MSG_Q_DIST_STATUS_TIMEOUT			2	/* timeout */#define MSG_Q_DIST_STATUS_UNAVAIL			3	/* message unavailable */#define MSG_Q_DIST_STATUS_UNREACH			4	/* remote node is unreachable */#define MSG_Q_DIST_STATUS_ILLEGAL_OBJ_ID	5	/* illegal object id */#define MSG_Q_DIST_STATUS_NOT_ENOUGH_MEMORY	6	/* out of memory */#define MSG_Q_DIST_STATUS_INTERNAL_ERROR	7	/* internal error */#define MSG_Q_DIST_STATUS_PROTOCOL_ERROR	8	/* protocol error */#define MSG_Q_DIST_STATUS_LOCAL_TIMEOUT		9	/* local timeout */#define DIST_MSG_Q_NUM_MSGS_PRIO	(servTable[DIST_ID_MSG_Q_SERV].servNetPrio)#define DIST_MSG_Q_RECV_PRIO		(servTable[DIST_ID_MSG_Q_SERV].servNetPrio)#define DIST_MSG_Q_ERROR_PRIO		(servTable[DIST_ID_MSG_Q_SERV].servNetPrio)#define DIST_MSG_Q_TYPE_NBITS		1#define DIST_MSG_Q_TYPE_MASK		0x1L#define TYPE_DIST_MSG_Q				0L#define TYPE_DIST_MSG_Q_GRP			1L/* maximum number of nodes on the net */#define DIST_MSG_Q_MAX_NODES_LOG2	8#define DIST_MSG_Q_MAX_NODES		256/* maximum number of local message queues */#define DIST_MSG_Q_MAX_QS_LOG2		8#define DIST_MSG_Q_MAX_QS			256/* size of table for local message queues */#define TBL_SIZE					64#if TBL_SIZE > DIST_MSG_Q_MAX_QS#error "Too many local message queues for underlying layer!"#endif/* * MSG_Q_ID -> foo *//* MSG_Q_ID -> DIST_OBJ_NODE */#define MSG_Q_ID_TO_DIST_OBJ_NODE(msgQId) \	((DIST_OBJ_NODE *) (((uint32_t) msgQId) & ~VX_TYPE_OBJ_MASK))/* * DIST_OBJ_NODE -> foo *//* DIST_OBJ_NODE -> MSG_Q_ID */#define DIST_OBJ_NODE_TO_MSG_Q_ID(pObjNode) \	((MSG_Q_ID) (((uint32_t) pObjNode) | VX_TYPE_DIST_OBJ))/* * DIST_MSG_Q_ID -> foo *//* DIST_MSG_Q_ID -> DIST_MSG_Q_GRP_ID */#define DIST_MSG_Q_ID_TO_DIST_MSG_Q_GRP_ID(distMsgQId) \	((DIST_MSG_Q_GRP_ID) ((distMsgQId) >> DIST_MSG_Q_TYPE_SHIFT))/* DIST_MSG_Q_ID -> TBL_IX */#define DIST_MSG_Q_ID_TO_TBL_IX(distMsgQId) \	((TBL_IX) ((distMsgQId) >> DIST_MSG_Q_TYPE_SHIFT))/* * DIST_MSG_Q_GRP_ID -> foo *//* DIST_MSG_Q_GRP_ID -> DIST_MSG_Q_ID */#define DIST_MSG_Q_GRP_ID_TO_DIST_MSG_Q_ID(distMsgQGrpId) \	((DIST_MSG_Q_ID) \	 (((uint32_t) (distMsgQGrpId) << DIST_MSG_Q_TYPE_SHIFT) | \	  DIST_MSG_Q_TYPE_MSG_Q_GRP))/* * TBL_IX -> foo *//* TBL_IX -> DIST_MSG_Q_ID */#define TBL_IX_TO_DIST_MSG_Q_ID(tblIx) \	((DIST_MSG_Q_ID) \	 (((uint32_t) (tblIx) << DIST_MSG_Q_TYPE_SHIFT) | \	  DIST_MSG_Q_TYPE_MSG_Q))/* * IS_xxx *//* typedefs and structures */typedef uint32_t	DIST_MSG_Q_ID;			/* DIST_MSG_Q_ID */typedef uint16_t	DIST_MSG_Q_SNGL_ID;		/* DIST_MSG_Q_SNGL_ID */typedef uint16_t	DIST_MSG_Q_GRP_ID;		/* DIST_MSG_Q_GRP_ID */typedef uint8_t		TBL_IX;					/* TBL_IX */typedef short		DIST_MSG_Q_STATUS;		/* DIST_MSG_Q_STATUS */typedef struct 								/* TBL_NODE */	{	union		{		SL_NODE		nxtFree;		MSG_Q_ID	msgQId;		} tblNodeType;	TBL_IX   tblIx;	} TBL_NODE;#define tblNxtFree	tblNodeType.nxtFree#define tblMsgQId	tblNodeType.msgQId/* * Header for a packet addressed to a remote message queue. */typedef struct								/* DIST_PKT_MSG_Q_SEND */	{	DIST_PKT		sendHdr;	uint32_t		sendInqId;	uint32_t		sendTimeout;	TBL_IX			sendTblIx;				/* uint8_t */	__DIST_PKT_HDR_END__	/* message follows */	} DIST_PKT_MSG_Q_SEND;typedef struct								/* DIST_PKT_MSG_Q_RECV_REQ */	{	DIST_PKT		recvReqHdr;	uint32_t		recvReqInqId;	uint32_t		recvReqMaxNBytes;	uint32_t		recvReqTimeout;	TBL_IX			recvReqTblIx;			/* uint8_t */	__DIST_PKT_HDR_END__	} DIST_PKT_MSG_Q_RECV_REQ;typedef struct								/* DIST_PKT_MSG_Q_RECV_RPL */	{	DIST_PKT		recvRplHdr;	uint32_t		recvRplInqId;	__DIST_PKT_HDR_END__	/* message follows */	} DIST_PKT_MSG_Q_RECV_RPL;typedef struct								/* DIST_PKT_MSG_Q_NUM_MSGS_REQ */	{	DIST_PKT		numMsgsReqHdr;	uint32_t		numMsgsReqInqId;	TBL_IX			numMsgsReqTblIx;		/* uint8_t */	__DIST_PKT_HDR_END__	} DIST_PKT_MSG_Q_NUM_MSGS_REQ;typedef struct								/* DIST_PKT_MSG_Q_NUM_MSGS_RPL */	{	DIST_PKT		numMsgsRplHdr;	uint32_t		numMsgsRplInqId;	uint32_t		numMsgsRplNum;	__DIST_PKT_HDR_END__	} DIST_PKT_MSG_Q_NUM_MSGS_RPL;typedef struct								/* DIST_PKT_MSG_Q_STATUS */	{	DIST_PKT		statusHdr;	uint32_t		statusInqId;	uint32_t		statusErrno;	uint16_t		statusDStatus;	__DIST_PKT_HDR_END__	} DIST_PKT_MSG_Q_STATUS;/* * Inquiry nodes. */typedef struct								/* DIST_MSG_Q_SEND_INQ */	{	DIST_INQ	sendInq;	SEMAPHORE	sendInqWait;	int			sendInqTask;	BOOL		sendInqMsgQueued;		BOOL        remoteError;	} DIST_MSG_Q_SEND_INQ;typedef struct								/* DIST_MSG_Q_RECV_INQ */	{	DIST_INQ	recvInq;	SEMAPHORE	recvInqWait;	int			recvInqTask;	char		*pRecvInqBuffer;	UINT		recvInqMaxNBytes;	BOOL		recvInqMsgArrived;		BOOL        remoteError;	} DIST_MSG_Q_RECV_INQ;typedef struct								/* DIST_MSG_Q_NUM_MSGS_INQ */	{	DIST_INQ	numMsgsInq;	SEMAPHORE	numMsgsInqWait;	int			numMsgsInqTask;	int			numMsgsInqNum;	} DIST_MSG_Q_NUM_MSGS_INQ;extern FUNCPTR msgQDistShowRtn;extern FUNCPTR msgQDistInfoGetRtn;/* function declarations */#if defined(__STDC__) || defined(__cplusplus)MSG_Q_ID	msgQDistGetMapped (MSG_Q_ID msgQId);#else   /* __STDC__ */MSG_Q_ID	msgQDistGetMapped ();#endif  /* __STDC__ */#ifdef __cplusplus}#endif#endif /* __INCmsgQDistLibPh */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -