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

📄 oioic.h

📁 robot open source code
💻 H
📖 第 1 页 / 共 4 页
字号:
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->IOput(*(This->ppo_AIB+i), IStrm, Qty, OStrm, Cty, pQty, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_SBOOIX) return ir; \
		} \
		return ir; \
	}while(0)

/*
 *
 * 名称:_SBO_OBJECT_IOPUT
 * 描述:宏,IOput接口的_SBO_O_IX。
 */
#define  _SBO_OBJECT_IOPUT \
	do{ \
		IRESULT  ir = IR_O__SBOOIX; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				ir = (*(This->ppo_AIB+i))->IOput(*(This->ppo_AIB+i), IStrm, Qty, OStrm, Cty, pQty, pCaller); \
		} \
		return ir; \
	}while(0)
	
/*
 *
 * 名称:OBS_OBJECT_INTERACT0
 * 描述:宏,Interact0接口的OBS_O_IX。
 */
#define  OBS_OBJECT_INTERACT0 \
	do{ \
		IRESULT  ir = IR_O_OBSOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Interact0(*(This->ppo_AIB+i), Act, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_OBSOIX) return ir; \
		} \
	}while(0)

/*
 *
 * 名称:OBS_OBJECT_INTERACT0_
 * 描述:宏,Interact0接口的OBS_O_IX_。
 */
#define  OBS_OBJECT_INTERACT0_ \
	do{ \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				(*(This->ppo_AIB+i))->Interact0(*(This->ppo_AIB+i), Act, pCaller); \
		} \
	}while(0)

/*
 *
 * 名称:SBO_OBJECT_INTERACT0
 * 描述:宏,Interact0接口的SBO_O_IX。
 */
#define  SBO_OBJECT_INTERACT0 \
	do{ \
		IRESULT  ir = IR_O_SBOOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Interact0(*(This->ppo_AIB+i), Act, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_SBOOIX) return ir; \
		} \
		return ir; \
	}while(0)
	
/*
 *
 * 名称:_SBO_OBJECT_INTERACT0
 * 描述:宏,Interact0接口的_SBO_O_IX。
 */
#define  _SBO_OBJECT_INTERACT0 \
	do{ \
		IRESULT  ir = IR_O__SBOOIX; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				(*(This->ppo_AIB+i))->Interact0(*(This->ppo_AIB+i), Act, pCaller); \
		} \
		return ir; \
	}while(0)

/*
 *
 * 名称:OBS_OBJECT_INTERACT1
 * 描述:宏,Interact1接口的OBS_O_IX。
 */
#define  OBS_OBJECT_INTERACT1 \
	do{ \
		IRESULT  ir = IR_O_OBSOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Interact1(*(This->ppo_AIB+i), Act, OStrm, Cty, pQty, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_OBSOIX) return ir; \
		} \
	}while(0)

/*
 *
 * 名称:OBS_OBJECT_INTERACT1_
 * 描述:宏,Interact1接口的OBS_O_IX_。
 */
#define  OBS_OBJECT_INTERACT1_ \
	do{ \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				(*(This->ppo_AIB+i))->Interact1(*(This->ppo_AIB+i), Act, OStrm, Cty, pQty, pCaller); \
		} \
	}while(0)

/*
 *
 * 名称:SBO_OBJECT_INTERACT1
 * 描述:宏,Interact1接口的SBO_O_IX。
 */
#define  SBO_OBJECT_INTERACT1 \
	do{ \
		IRESULT  ir = IR_O_SBOOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Interact1(*(This->ppo_AIB+i), Act, OStrm, Cty, pQty, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_SBOOIX) return ir; \
		} \
		return ir; \
	}while(0)

/*
 *
 * 名称:_SBO_OBJECT_INTERACT1
 * 描述:宏,Interact1接口的_SBO_O_IX。
 */
#define  _SBO_OBJECT_INTERACT1 \
	do{ \
		IRESULT  ir = IR_O__SBOOIX; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				ir = (*(This->ppo_AIB+i))->Interact1(*(This->ppo_AIB+i), Act, OStrm, Cty, pQty, pCaller); \
		} \
		return ir; \
	}while(0)
	
/*
 *
 * 名称:OBS_OBJECT_INTERACT2
 * 描述:宏,Interact2接口的OBS_O_IX。
 */
#define  OBS_OBJECT_INTERACT2 \
	do{ \
		IRESULT  ir = IR_O_OBSOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Interact2(*(This->ppo_AIB+i), Act, IStrm, Qty, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_OBSOIX) return ir; \
		} \
	}while(0)

/*
 *
 * 名称:OBS_OBJECT_INTERACT2_
 * 描述:宏,Interact2接口的OBS_O_IX_。
 */
#define  OBS_OBJECT_INTERACT2_ \
	do{ \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				(*(This->ppo_AIB+i))->Interact2(*(This->ppo_AIB+i), Act, IStrm, Qty, pCaller); \
		} \
	}while(0)

/*
 *
 * 名称:SBO_OBJECT_INTERACT2
 * 描述:宏,Interact2接口的SBO_O_IX。
 */
#define  SBO_OBJECT_INTERACT2 \
	do{ \
		IRESULT  ir = IR_O_SBOOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Interact2(*(This->ppo_AIB+i), Act, IStrm, Qty, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_SBOOIX) return ir; \
		} \
		return ir; \
	}while(0)

/*
 *
 * 名称:_SBO_OBJECT_INTERACT2
 * 描述:宏,Interact2接口的_SBO_O_IX。
 */
#define  _SBO_OBJECT_INTERACT2 \
	do{ \
		IRESULT  ir = IR_O__SBOOIX; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				ir = (*(This->ppo_AIB+i))->Interact2(*(This->ppo_AIB+i), Act, IStrm, Qty, pCaller); \
		} \
		return ir; \
	}while(0)
	
/*
 *
 * 名称:OBS_OBJECT_INTERACT3
 * 描述:宏,Interact3接口的OBS_O_IX。
 */
#define  OBS_OBJECT_INTERACT3 \
	do{ \
		IRESULT  ir = IR_O_OBSOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Interact3(*(This->ppo_AIB+i), Act, IStrm, Qty, OStrm, Cty, pQty, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_OBSOIX) return ir; \
		} \
	}while(0)

 /*
 *
 * 名称:OBS_OBJECT_INTERACT3_
 * 描述:宏,Interact3接口的OBS_O_IX_。
 */
#define  OBS_OBJECT_INTERACT3_ \
	do{ \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				(*(This->ppo_AIB+i))->Interact3(*(This->ppo_AIB+i), Act, IStrm, Qty, OStrm, Cty, pQty, pCaller); \
		} \
	}while(0)
 
/*
 *
 * 名称:SBO_OBJECT_INTERACT3
 * 描述:宏,Interact3接口的SBO_O_IX。
 */
#define  SBO_OBJECT_INTERACT3 \
	do{ \
		IRESULT  ir = IR_O_SBOOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
			if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Interact3(*(This->ppo_AIB+i), Act, IStrm, Qty, OStrm, Cty, pQty, pCaller); \
			else if(FR_N_HASVR == fr) continue; \
			else ir = IR_N; \
			if(ir != IR_O_SBOOIX) return ir; \
		} \
		return ir; \
	}while(0)

 /*
 *
 * 名称:_SBO_OBJECT_INTERACT3
 * 描述:宏,Interact3接口的_SBO_O_IX。
 */
#define  _SBO_OBJECT_INTERACT3 \
	do{ \
		IRESULT  ir = IR_O__SBOOIX; \
		IRESULT  fr; \
		NUMIB    i; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if(FR_P == CallerCome(*(This->ppo_AIB+i), pCaller)) \
				ir = (*(This->ppo_AIB+i))->Interact3(*(This->ppo_AIB+i), Act, IStrm, Qty, OStrm, Cty, pQty, pCaller); \
		} \
		return ir; \
	}while(0)

/*
 *
 * 名称:OBS_OBJECT_CLOSE_
 * 描述:宏,Close接口的OBS_O_IX_。
 */
#define  OBS_OBJECT_CLOSE_ \
	do{ \
		IRESULT  ir; \
		IRESULT  fr; \
		NUMIB    i; \
		if( 0 == This->RefCnt ) \
			return IR_O_NOPEN; \
		This->RefCnt--; \
		for(i=0; i<This->NIB; i++) \
		{ \
			extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller); \
			if((*(This->ppo_AIB+i))->RefCnt -1 == This->RefCnt) \
			{ \
				fr = CallerCome(*(This->ppo_AIB+i), pCaller); \
				if(FR_P == fr) ir = (*(This->ppo_AIB+i))->Close(*(This->ppo_AIB+i), pCaller); \
				else if(FR_N_HASVR == fr) continue; \
				else ir = IR_N; \
				if( NIR(ir) ) \
				{ \
					This->RefCnt++; \
					return ir; \
				} \
			} \
		} \
	}while(0)

/*==========+  CreateObject & DestroyObject  +===========*/
/**
 *
 * 名称:CreateObject
 * 描述:宏,动态创建对象。
 * 参数:Msn --- [IN]  模序号,指定创建哪个模的对象。
 *       IQCty --- [IN] 输入队列的容量。
 *       OQCty --- [IN] 输出队列的容量。
 *       NumCR --- [IN] 来访者数量。
 *       ppObj --- [OUT] 输出创建的对象。
 */
extern  FRESULT  __CreateObject__(MLDSN Msn, BYTKTY IQCty, BYTKTY OQCty, SI32 NumCR, OBJECT** ppObj, BYTE* pExotic);
#define  CreateObject(Msn, IQCty, OQCty, NumCR, ppObj) \
	    __CreateObject__(Msn, IQCty, OQCty, NumCR, ppObj, NULL)

/*
 *
 * 名称:DestroyObject
 * 描述:宏,销毁动态创建的对象,即销毁由CreateObject宏创建的对象。
 * 参数:pObj --- [IN] 指向对象。
 */
extern  BOOL  __DestroyObject__(OBJECT*  pObj); 
#define  DestroyObject( pObj ) \
	do{ \
		if(TRUE == __DestroyObject__(pObj)) \
		{ \
			free(pObj); \
			(pObj) = NULL; \
		} \
	}while(0) 

/*===========+  向外声明外面直接调用的函数  +============*/

extern  FRESULT  Enqueue(QUEUE* pq, BYTE* IData, BYTKTY Qty);
extern  FRESULT  Dequeue(QUEUE* pq, BYTE* OData, BYTKTY Cty, BYTKTY* pQty);
extern  OBJECT*  GetBN(OBJECT* pND, MLDSN msn);
extern  EM*      GetEMofBN(OBJECT* pND, MLDSN msn);
extern  QUEUE*   GetIQ(OBJECT* pND);
extern  QUEUE*   GetOQ(OBJECT* pND);

#if INLINE_VOFUNCTION == 0

extern  IRESULT VO_Open(OBJECT* pObject, const VR* pCaller);
extern  IRESULT VO_Input(OBJECT* pObject, BYTE* IStrm, BYTKTY Qty, const VR* pCaller);
extern  IRESULT VO_Output(OBJECT* pObject, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller); 
extern  IRESULT VO_IOput(OBJECT* pObject, BYTE* IStrm, BYTKTY Qty, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller);
extern  IRESULT VO_Interact0(OBJECT* pObject, ACTION Act, const VR* pCaller); 
extern  IRESULT VO_Interact1(OBJECT* pObject, ACTION Act, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller);
extern  IRESULT VO_Interact2(OBJECT* pObject, ACTION Act, BYTE* IStrm, BYTKTY Qty, const VR* pCaller);
extern  IRESULT VO_Interact3(OBJECT* pObject, ACTION Act, BYTE* IStrm, BYTKTY Qty, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller);
extern  IRESULT VO_Close(OBJECT* pObject, const VR* pCaller);

#endif


#endif  /* #ifndef __OIOIC_H__ */

⌨️ 快捷键说明

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