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

📄 msgqdistgrplibp.h

📁 VxWorks源码
💻 H
字号:
/* msgQDistGrpLibP.h - distributed msg Q group library private hdr (VxFusion) *//* Copyright 1999 Wind River Systems, Inc. *//*modification history--------------------01b,24may99,drm  added vxfusion prefix to VxFusion related includes01a,11jun97,ur   written.*/#ifndef __INCmsgQDistGrpLibPh#define __INCmsgQDistGrpLibPh#ifdef __cplusplusextern "C" {#endif#include "vxWorks.h"#include "sllLib.h"#include "dllLib.h"#include "hashLib.h"#include "sysLib.h"#include "vxfusion/distLib.h"#include "vxfusion/private/msgQDistLibP.h"#include "vxfusion/private/distPktLibP.h"#include "vxfusion/private/distNetLibP.h"#include "vxfusion/private/distNodeLibP.h"#include "vxfusion/private/distNameLibP.h"extern SEMAPHORE			distGrpDbSemaphore;extern DIST_MSG_Q_GRP_ID	distGrpIdNext;/* * defines */#define DIST_DGDB_SERV_NAME					"tServDgdb"#define DIST_DGDB_SERV_TASK_PRIO			50#define DIST_DGDB_SERV_TASK_STACK_SZ		5000#define DIST_MSG_Q_GRP_SERV_NAME			"tServGrp"#define DIST_MSG_Q_GRP_SERV_TASK_PRIO		50#define DIST_MSG_Q_GRP_SERV_TASK_STACK_SZ	5000#define DIST_GAP_SERV_NAME					"tServGap"#define DIST_GAP_SERV_TASK_PRIO				50#define DIST_GAP_SERV_TASK_STACK_SZ			5000#define DIST_DGDB_SERV_NET_PRIO				0#define DIST_MSG_Q_GRP_SERV_NET_PRIO		0#define DIST_GAP_SERV_NET_PRIO				0#define DIST_GAP_MGR_WAKEUP_DSEC			10	/* wakeup manager once a sec */#define DIST_GAP_MGR_PRIO					50#define DIST_GAP_MGR_STACK_SZ				5000#define DIST_MSG_Q_GRP_WAIT_TASK_PRIO		50#define DIST_MSG_Q_GRP_WAIT_TASK_STACK_SZ	5000/* * The following timeouts are in units of DIST_GAP_MGR_WAKEUP_DSEC. */#define DIST_GAP_TRY_TIMO			2	/* 2 times DIST_GAP_MGR_WAKEUP_DSEC */#define DIST_GAP_WAIT_TIMO			2	/* 2 times DIST_GAP_MGR_WAKEUP_DSEC */#define DIST_GAP_MAX_RETRIES		1	/* a single retry */#define DIST_MSG_Q_GRP_PRIO \	(servTable[DIST_ID_MSG_Q_GRP_SERV].servNetPrio)#define DIST_DGDB_PRIO \	(servTable[DIST_ID_DGDB_SERV].servNetPrio)#define DIST_GAP_PRIO \	(servTable[DIST_ID_GAP_SERV].servNetPrio)/* subtypes of DIST_PKT_TYPE_DGDB */#define DIST_PKT_TYPE_DGDB_ADD			0	/* subtypes of DIST_PKT_TYPE_MSG_Q_GRP */#define DIST_PKT_TYPE_MSG_Q_GRP_SEND	0#define DIST_PKT_TYPE_MSG_Q_GRP_STATUS	1/* subtypes of DIST_PKT_TYPE_GAP */#define DIST_PKT_TYPE_GAP_OK			0#define DIST_PKT_TYPE_GAP_REJECT		1#define DIST_PKT_TYPE_GAP_TRY			2#define DIST_PKT_TYPE_GAP_ASK_WAIT		3#define DIST_PKT_TYPE_GAP_SET			4/* status codes for distributed groups */#define MSG_Q_DIST_GRP_STATUS_OK					OK#define MSG_Q_DIST_GRP_STATUS_ERROR					1#define MSG_Q_DIST_GRP_STATUS_NOT_ENOUGH_MEMORY		2#define MSG_Q_DIST_GRP_STATUS_ILLEGAL_OBJ_ID		3#define MSG_Q_DIST_GRP_STATUS_PROTOCOL_ERROR		4#define MSG_Q_DIST_GRP_STATUS_INTERNAL_ERROR		5#define MSG_Q_DIST_GRP_STATUS_UNAVAIL				6#define MSG_Q_DIST_GRP_STATUS_LOCAL_TIMEOUT			7/* status codes for DGDB */#define DIST_GDB_STATUS_OK							OK#define DIST_GDB_STATUS_PROTOCOL_ERROR				1/* status codes for GAP */#define DIST_GAP_STATUS_OK							OK#define DIST_GRP_STATE_LOCAL_TRY	0	/* local node tries to create group */#define DIST_GRP_STATE_REMOTE_TRY	1	/* remote node tries to create group */#define DIST_GRP_STATE_WAIT			2	/* wait for id from remote node */#define DIST_GRP_STATE_WAIT_TRY		3	/* retry after wait */#define DIST_GRP_STATE_GLOBAL		5	/* group is global */#define DIST_MSG_Q_GRP_INQ_TYPE_SEND	((0 << 8) | DIST_MSG_Q_GRP_INQ)#define DIST_GAP_MGR_WAKEUP_TICKS \	(DIST_GAP_MGR_WAKEUP_DSEC * (sysClkRateGet () / 10))#define msgQDistGrpLclGetId(distGrpDbNode) \		((distGrpDbNode)->grpDbId)/* msgQDistGrpLclSetId() is a function */#define msgQDistGrpLclGetState(distGrpDbNode) \		((distGrpDbNode)->grpDbState)#define msgQDistGrpLclSetState(distGrpDbNode, distGrpState) \		((distGrpDbNode)->grpDbState = (distGrpState))#define msgQDistGrpLclSetCreator(distGrpDbNode, distNodeId) \		((distGrpDbNode)->grpDbNodeId = (distNodeId))#define msgQDistGrpDbLockInit()	\			semBInit (&distGrpDbSemaphore, SEM_Q_PRIORITY, SEM_FULL)#define msgQDistGrpDbUnlock() \			semGive (&distGrpDbSemaphore)#define msgQDistGrpDbLock() \			semTake (&distGrpDbSemaphore, WAIT_FOREVER)#define distGapLockInit() \			semBInit (&distGapSemaphore, SEM_Q_PRIORITY, SEM_FULL)#define distGapUnlock() \			semGive (&distGapSemaphore)#define distGapLock() \			semTake (&distGapSemaphore, WAIT_FOREVER)#define msgQGrpSendInqLockInit(pInqId) \			semBInit (&((pInqId)->sendInqLock), SEM_Q_PRIORITY, SEM_FULL)#define msgQGrpSendInqUnlock(pInqId) \			semGive (&((pInqId)->sendInqLock))#define msgQGrpSendInqLock(pInqId) \			semTake (&((pInqId)->sendInqLock), WAIT_FOREVER)#define DIST_PKT_GAP_MAX_LEN	(sizeof (DIST_PKT_GAP_OK))/* * typedefs *//* * Forward structure declarations [sic]. */#ifdef __STDC__struct _DIST_GRP_DB_NODE;#endiftypedef struct						/* DIST_GAP_NODE */	{	DL_NODE						gapLink;	struct _DIST_GRP_DB_NODE	*pGapGrp;	SL_LIST						gapOutstand;	short						gapTimeout;	short						gapRetries;	SEMAPHORE					gapWaitFor;	} DIST_GAP_NODE;typedef struct						/* DIST_GAP_RESPONSE */	{	SL_NODE				gapResponseNext;	DIST_NODE_DB_NODE	*pGapResponseNode;	} DIST_GAP_RESPONSE;/* MSG_Q_GRP packets */typedef struct						/* DIST_PKT_MSG_Q_GRP_SEND */	{	DIST_PKT			pktMsgQGrpSendHdr;	uint32_t			pktMsgQGrpSendInqId;	uint32_t			pktMsgQGrpSendTimeout;	DIST_MSG_Q_GRP_ID	pktMsgQGrpSendId;			/* uint16_t */	__DIST_PKT_HDR_END__	/* message follows */	} DIST_PKT_MSG_Q_GRP_SEND;typedef struct						/* DIST_PKT_MSG_Q_GRP_STATUS */	{	DIST_PKT			pktMsgQGrpStatusHdr;	uint32_t			pktMsgQGrpStatusInqId;	uint32_t			pktMsgQGrpStatusErrno;	uint16_t			pktMsgQGrpStatusDStatus;	__DIST_PKT_HDR_END__	} DIST_PKT_MSG_Q_GRP_STATUS;/* DGDB (distributed group database) telegrams */typedef struct						/* DIST_PKT_DGDB_ADD */	{	DIST_PKT			pktDgdbAddHdr;	DIST_NODE_ID		pktDgdbAddCreator;			/* uint32_t */	DIST_MSG_Q_GRP_ID	pktDgdbAddId;				/* uint16_t */	__DIST_PKT_HDR_END__	/* group name follows */	} DIST_PKT_DGDB_ADD;/* GAP (group agreement protocol) telegrams */typedef struct						/* DIST_PKT_GAP_OK */	{	DIST_PKT			okHdr;	DIST_MSG_Q_GRP_ID	okId;						/* uint16_t */	char				okName[DIST_NAME_MAX_LENGTH + 1];	} DIST_PKT_GAP_OK;typedef struct						/* DIST_PKT_GAP_REJECT */	{	DIST_PKT			rejectHdr;	DIST_MSG_Q_GRP_ID	rejectId;					/* uint16_t */	char				rejectName[DIST_NAME_MAX_LENGTH + 1];	} DIST_PKT_GAP_REJECT;typedef struct						/* DIST_PKT_GAP_TRY */	{	DIST_PKT			tryHdr;	DIST_MSG_Q_GRP_ID	tryId;						/* uint16_t */	char				tryName[DIST_NAME_MAX_LENGTH + 1];	} DIST_PKT_GAP_TRY;typedef struct						/* DIST_PKT_GAP_ASK_WAIT */	{	DIST_PKT			askWaitHdr;	DIST_MSG_Q_GRP_ID	askWaitId;					/* uint16_t */	char				askWaitName[DIST_NAME_MAX_LENGTH + 1];	} DIST_PKT_GAP_ASK_WAIT;typedef struct						/* DIST_PKT_GAP_SET */	{	DIST_PKT			setHdr;	DIST_MSG_Q_GRP_ID	setId;						/* uint16_t */	char				setName[DIST_NAME_MAX_LENGTH + 1];	} DIST_PKT_GAP_SET;/* other typedefs */typedef int DIST_GRP_STATE;			/* DIST_GRP_STATE */typedef struct _DIST_GRP_DB_NODE	/* DIST_GRP_DB_NODE */	{	union		{		SL_NODE freeNode;	/* used to link free nodes */		struct			{			char				distGrpName[DIST_NAME_MAX_LENGTH + 1];			DIST_MSG_Q_GRP_ID	distGrpId;		/* distributed group id */			MSG_Q_ID			msgQId;			/* message queue id */			DIST_NODE_ID		distNodeId;		/* id of the creating node */			SL_LIST				msgQIdLst;		/* list of members */			DIST_GRP_STATE		grpState;		/* current state of group */			DIST_GAP_NODE		*pDistGapNode;	/* ptr to GAP structure */			} dbNode;		} stateNode;	int ixNode;	} DIST_GRP_DB_NODE;#define grpDbFreeNode	stateNode.freeNode#define grpDbName		stateNode.dbNode.distGrpName#define grpDbId			stateNode.dbNode.distGrpId#define grpDbNodeId		stateNode.dbNode.distNodeId#define grpDbMsgQIdLst	stateNode.dbNode.msgQIdLst#define grpDbState		stateNode.dbNode.grpState#define pGrpDbGapNode	stateNode.dbNode.pDistGapNode#define grpDbMsgQId		stateNode.dbNode.msgQIdtypedef struct						/* DIST_GRP_HASH_NODE */	{	HASH_NODE			hashNode;	DIST_GRP_DB_NODE	*pDbNode;	} DIST_GRP_HASH_NODE;typedef struct						/* DIST_GRP_MSG_Q_NODE */	{	SL_NODE		slNode;	MSG_Q_ID	msgQId;	} DIST_GRP_MSG_Q_NODE;typedef struct						/* DIST_GRP_BURST */	{	DIST_NODE_ID	burstNodeId;	STATUS			burstStatus;	} DIST_GRP_BURST;typedef struct						/* DIST_MSG_Q_GRP_SEND_INQ */	{	DIST_INQ	sendInq;	SEMAPHORE	sendInqLock;			/* lock this group-send inquiry */    SEMAPHORE	sendInqWait;	int			sendInqTask;	int			sendInqNumBlocked;	int			sendInqNumOutstanding;	DIST_STATUS	sendInqStatus;	} DIST_MSG_Q_GRP_SEND_INQ;/* declarations */#if defined(__STDC__) || defined(__cplusplus)DIST_MSG_Q_GRP_ID	msgQDistGrpAgree (DIST_GRP_DB_NODE *pDistGrpDbNode);STATUS				msgQDistGrpAddMember (DIST_GRP_DB_NODE *pDistGrpDbNode,						MSG_Q_ID msgQId);STATUS				msgQDistGrpSend (DIST_MSG_Q_GRP_ID distMsgQGrpId,						char *buffer, UINT nBytes, int msgQTimeout,						int overallTimeout, int priority);STATUS				msgQDistGrpBurst (DIST_NODE_ID nodeId);DIST_GRP_DB_NODE	*msgQDistGrpLclCreate (char *distGrpName,						DIST_MSG_Q_GRP_ID grpId, DIST_GRP_STATE grpState);void				msgQDistGrpLclSetId (DIST_GRP_DB_NODE *pDistGrpDbNode,						DIST_MSG_Q_GRP_ID grpId);STATUS				msgQDistGrpLclAddMember (DIST_GRP_DB_NODE *pDbNode,						MSG_Q_ID msgQId);DIST_GRP_DB_NODE	*msgQDistGrpLclFindByName (char *distGrpName);DIST_GRP_DB_NODE	*msgQDistGrpLclFindById (DIST_MSG_Q_GRP_ID uniqGrpId);void				msgQDistGrpLclEach (FUNCPTR routine, int routineArg);STATUS				distGapLibInit (void);DIST_MSG_Q_GRP_ID	distGapStart (DIST_GRP_DB_NODE *pDistGrpDbNode);void				distGapNodeInit (DIST_GAP_NODE *pDistGapNode,						DIST_GRP_DB_NODE *pDistGrpDbNode, BOOL link);void				distGapNodeDelete (DIST_GAP_NODE *pDistGapNode);#else   /* __STDC__ */DIST_MSG_Q_GRP_ID	msgQDistGrpAgree ();STATUS				msgQDistGrpAddMember ();STATUS				msgQDistGrpSend ();STATUS				msgQDistGrpBurst ();DIST_GRP_DB_NODE	*msgQDistGrpLclCreate ();void				msgQDistGrpLclSetId ();STATUS				msgQDistGrpLclAddMember ();DIST_GRP_DB_NODE	*msgQDistGrpLclFindByName ();DIST_GRP_DB_NODE	*msgQDistGrpLclFindById ();void				msgQDistGrpLclEach ();STATUS				distGapLibInit ();DIST_MSG_Q_GRP_ID	distGapStart ();void				distGapNodeInit ();void				distGapNodeDelete ();#endif  /* __STDC__ */#ifdef __cplusplus}#endif#endif	/* __INCmsgQDistGrpLibPh */

⌨️ 快捷键说明

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