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

📄 oioic.h

📁 robot open source code
💻 H
📖 第 1 页 / 共 4 页
字号:
/**
 *
 * 文 件 名:oioic.h
 *
 * 描    述:OIOIC 的 .h 文件。
 *
 * 创 建 者:赵平智   <pervise.zhao@gmail.com>
 *
 * 创建日期:20050310
 *
 * 版    本:1.0.0
 *
 * 版权(C)2005 赵平智。保留所有权利。   
 *
 * 备    注:
 *
 *
 * * 维护历史 *
 *
 *   <日期>             <修改者>
 *   <修改内容...>
 *
 **/

#ifndef __OIOIC_H__
#define __OIOIC_H__
      

/*
*
* 名称:INLINE_VOFUNCTION
* 描述:内联VO函数的开关。0 - 不内联,1 - 内联,其它 - 保留不用。
* 备注:定义为1时,能否真正内联VO函数还取决于下面的“_INLINE_”宏定义是否有效。
*/
#define     INLINE_VOFUNCTION          0

/*
*
* 名称:_INLINE_
* 描述:宏定义内联指示符,因为编译器的内联指示符不统一。
* 备注:一定要定义为有效的内联指示符,否则即使编译通过,内联也是无效的,编译
*       器会自动把用其修饰的函数转为非内联编译。
*/
#define      _INLINE_		__inline
     

/*
 *
 * 描述:OS、HO、SO的mask。
 * 备注:目前OID是用64个比特位表示的(见下面OBJID数据类型定义)。其
 *       中,高16位是OS标识域,中32位是HO标识域,低16位是SO标识域。
 */
#define   MSKOS		  0xFFFF000000000000
#define   MSKHO		  0x0000FFFFFFFF0000
#define   MSKSO		  0x000000000000FFFF


/*
 *
 * 各OS的OID。
 */
#define		OID_OICOS            0x0001000000000000     /* Oicos的OID。*/
#define		OID_UNIX             0x0002000000000000     /* Unix的OID。*/
#define		OID_LINUX            0x0003000000000000     /* Linux的OID。*/
#define		OID_WINDOWS          0x0004000000000000     /* Windows的OID。*/


/*
 *
 * 名称:OID_OS
 * 描述:OS的OID。
 */
#define		OID_OS            OID_WINDOWS


/*
*
* 一级数据类型定义
*/
typedef  char                      SI8;  
typedef  unsigned char             UI8;  
typedef  short                     SI16;  
typedef  unsigned short            UI16; 
typedef  int                       SI32; 
typedef  unsigned int              UI32; 

#if OID_OS == OID_OICOS
#elif OID_OS == OID_UNIX
#elif OID_OS == OID_LINUX
typedef  long long                 SI64;
typedef  unsigned long long        UI64;
#elif OID_OS == OID_WINDOWS
typedef  __int64                   SI64;
typedef  unsigned __int64          UI64;
#else
#endif

typedef  float			           SR32;
/* typedef  unsigned float            UR32;  */
typedef  double                    SR64;
/* typedef  unsigned double           UR64; */
typedef  void                      VOID; 


/*
*
* 二级数据类型定义
*/
typedef  UI8      BYTE;    /* 位元组类型。*/
typedef  UI16     ACTION;  /* 行为类型。*/
typedef  UI32     BYTKTY;  /* by BYTe,c(K)apaciTY and q(K)uantiTY's type,以Byte为单位的容量和数量类型。*/
typedef  UI32     BITKTY;  /* by BIT,c(K)apaciTY and q(K)uantiTY's type,以Bit为单位的容量和数量类型。*/

typedef  UI16     MLDSN;  /* MSN类型。*/
typedef  UI64     OBJID;  /* OID类型。*/
typedef  UI32     REFCNT; /* object's REFerence CouNT type,对象的引用计数类型。*/
typedef  UI32     MODES;  /* 模式集类型。*/

typedef  UI16     NUMCS;  /* the NUMber of CS type,CS的数量类型。*/
typedef  UI16     NUMND;  /* the NUMber of ND type,ND的数量类型。*/
typedef  UI16     NUMIB;  /* the NUMber of IB type,IB的数量类型。*/
typedef  UI16     NUMBN;  /* the NUMber of BN type,BN的数量类型。*/

typedef  SI8      BOOL;  /* 布尔类型,规定此类型数据只能有两个值:TRUE 或 FALSE (见下面 TRUE 和 FALSE 的定义)。*/

typedef  SI32     IRESULT;  /* 对象接口执行结果的数据类型,必须是有符号类型。*/
typedef  SI32     FRESULT;  /* 函数执行结果的数据类型,必须是有符号类型。*/

/*
*
* Byte位数
*/
#define    BYTBITS         8


/*
*
* 描述:MSN
* 备注:要求MSN从1开始顺序编号,定义模板如下,
*       #define   MSN_XXX1    (MSN_ + 0)  /-* xxx1的MSN。HO *-/
*       #define   MSN_XXX2    (MSN_ + 1)  /-* xxx2的MSN。AO *-/
*       #define   MSN_XXX3    (MSN_ + 2)  /-* xxx3的MSN。.. *-/
*       #define   MSN_XXX4    (MSN_ + 3)  /-* xxx4的MSN。GO *-/
*       #define   MSN_XXX5    (MSN_ + 4)  /-* xxx5的MSN。.. *-/
*       ...     ...     ...     ...     ...     ...   
*       #define   MSN_XXXn    (MSN_ + n-1)  /-* xxxn的MSN。... *-/
*/
#define    MSN_OIOIC         1				   /* OIOIC的MSN。*/
#define    MSN_              (MSN_OIOIC + 1)   /* 其它MSN的起点。*/

/*
*
* 描述:通用模式定义。
* 备注:可定义 sizeof(MODES)*BYTBITS 个通用模式。即如下,
*
*    #define   MOD_                     1
*    #define   MOD_XXX0             ( MOD_ << 0 )     /-* BIT0。1:xxx;0:xxx。*-/
*    #define   MOD_XXX1             ( MOD_ << 1 )     /-* BIT1。1:xxx;0:xxx。*-/
*    #define   MOD_XXX2             ( MOD_ << 2 )     /-* BIT2。1:xxx;0:xxx。*-/
*       ...     ...     ...     ...     ...     ...    
*    #define   MOD_XXXn            ( MOD_ << (sizeof(MODES)*BYTBITS-1) )   /-* BITn。 1:xxx; 0:xxx。*-/
*/
#define   MOD_                  1
#define   MOD_SHARED            ( MOD_ << 0 )     /* BIT0。0:共享;1:非共享。*/
#define   MOD_BLOCKI            ( MOD_ << 1 )     /* BIT1。0:阻断输入;1:非阻断输入。只适用于Input和IOput接口。*/
#define   MOD_BLOCKO            ( MOD_ << 2 )     /* BIT2。0:阻断输出;1:非阻断输出。只适用于Output和IOput接口。*/


/*
*
* 描述:对象接口执行结果定义。 
* 备注:=== 定义模板 ===
*
*       ...     ...     ...     ...     ...     ...    
*       ...     ...     ...     ...     ...     ...    
*       #define     IR_N_PVT_YYY_            (IR_N_PVT_XXX_ - x)  /-* X2的私有N结果起点。*-/
*       #define     IR_N_XXX            (IR_N_PVT_XXX_ - x + 1) 
*       ...     ...     ...     ...     ...     ... 
*       #define     IR_N_XXX            (IR_N_PVT_XXX_ -1) 
*       #define     IR_N_XXX            (IR_N_PVT_XXX_ -0) 
*       /-** X1对象模的私有N结果:^ **-/
*
*       #define     IR_N_PVT_XXX_            (IR_N_PVT_ - x)  /-* X1的私有N结果起点。*-/
*       #define     IR_N_XXX            (IR_N_PVT_ - x + 1) 
*       ...     ...     ...     ...     ...     ...  
*       #define     IR_N_XXX            (IR_N_PVT_ -1) 
*       #define     IR_N_XXX            (IR_N_PVT_ -0) 
*       /-** 
*       ** 非一个对象模专用的N结果:^ 
*       **-/ 
*
*       ...     ...     ...     ...     ...     ...    
*       ...     ...     ...     ...     ...     ...    
*       #define     IR_O_PVTN_YYY_           (IR_O_PVTN_XXX_ - x)  /-* X2的私有负O结果起点。*-/
*       #define     IR_O_XXX            (IR_O_PVTN_XXX_ - x + 1) 
*       ...     ...     ...     ...     ...     ... 
*       #define     IR_O_XXX            (IR_O_PVTN_XXX_ -1) 
*       #define     IR_O_XXX            (IR_O_PVTN_XXX_ -0) 
*       /-** X1对象模的私有负O结果:^ **-/
*
*       #define     IR_O_PVTN_XXX_           (IR_O_PVTN_ - x)  /-* X1的私有负O结果起点。*-/
*       #define     IR_O_XXX            (IR_O_PVTN_ - x + 1) 
*       ...     ...     ...     ...     ...     ...  
*       #define     IR_O_XXX            (IR_O_PVTN_ -1) 
*       #define     IR_O_XXX            (IR_O_PVTN_ -0) 
*       /-**
*       ** 非一个对象模专用的负O结果:^ 
*       **
*       ** 非一个对象模专用的正O结果:
*       **-/
*       #define     IR_O_XXX           (IR_O_PVTP_ + 0)  
*       #define     IR_O_XXX           (IR_O_PVTP_ + 1)  
*       ...     ...     ...     ...     ...     ...     
*       #define     IR_O_XXX           (IR_O_PVTP_ + x - 1)  
*       #define     IR_O_PVTP_XXX_           (IR_O_PVTP_ + x)  /-* X1的私有正O结果起点。*-/
*
*       /-** X1对象模的私有正O结果:**-/
*       #define     IR_O_XXX           (IR_O_PVTP_XXX_ + 0)  
*       #define     IR_O_XXX           (IR_O_PVTP_XXX_ + 1)  
*       ...     ...     ...     ...     ...     ...    
*       #define     IR_O_XXX           (IR_O_PVTP_XXX_ + x - 1)  
*       #define     IR_O_PVTP_YYY_           (IR_O_PVTP_XXX_ + x)  /-* X2的私有正O结果起点。*-/
*       ...     ...     ...     ...     ...     ...    
*       ...     ...     ...     ...     ...     ...    
*
*       /-**
*       ** 非一个对象模专用的P结果:
*       **-/ 
*       #define     IR_P_XXX            (IR_P_PVT_ + 0)  
*       #define     IR_P_XXX            (IR_P_PVT_ + 1)  
*       ...     ...     ...     ...     ...     ...     
*       #define     IR_P_XXX            (IR_P_PVT_ + x - 1)  
*       #define     IR_P_PVT_XXX_            (IR_P_PVT_ + x)  /-* X1的私有P结果起点。*-/
*
*       /-** X1对象模的私有P结果:**-/
*       #define     IR_P_XXX            (IR_P_PVT_XXX_ + 0)  
*       #define     IR_P_XXX            (IR_P_PVT_XXX_ + 1)  
*       ...     ...     ...     ...     ...     ...    
*       #define     IR_P_XXX            (IR_P_PVT_XXX_ + x - 1)  
*       #define     IR_P_PVT_YYY_            (IR_P_PVT_XXX_ + x)  /-* X2的私有P结果起点。*-/
*       ...     ...     ...     ...     ...     ...    
*       ...     ...     ...     ...     ...     ...    
*
*/
#define     IR_N_PVT_           (IR_N_PRIVATE_ - 50)  /* <外部私有N结果的起点> */
#define     IR_N_UNSHARED       (FR_N_PRIVATE_ - 1)  /* Open, 对象是非共享的。*/
#define     IR_N_FULL           (FR_N_PRIVATE_ - 0)  /* Open,对象引用已满,不能再打开。*/
/* >#define     IR_N_PRIVATE_    (IR_N - x)  /-* <内部私有N结果的起点>*-/ */

#define     IR_N_PRIVATE_    (IR_N - 10)  /* <内部私有N结果的起点> */
#define     IR_N_INVALIDARG         (IR_N -1) /* 无效参数 */
#define     IR_N        __FR_ON__		/* N结果(否定性结果)的起点。*/
#define     __IR_ON__       (IR_O_PVTN_ - 1000)  /* O结果域的N界。*/

#define     IR_O_PVTN_		(IR_O - 10)  /* <外部私有负O结果起点> */

#define     IR_O_NOPEN		(IR_O - 2)  /* Close,对象还没有被打开。*/
#define     IR_O_VAINLY     (IR_O - 1)  /* 空操作 */
#define     IR_O			0			 /* O结果(中立性结果)域的中点。*/
#define     IR_O_OBSOIX      (IR_O + 1)  /* OBS顺序非接力访问模式专用执行结果。*/
#define     IR_O_SBOOIX      (IR_O + 2)  /* SBO顺序非接力访问模式专用执行结果。*/
#define     IR_O__SBOOIX     (IR_O + 3)  /* SBO顺序接力访问模式专用执行结果。*/

#define     IR_O_PVTP_		(IR_O + 10)  /* <外部私有正O结果起点> */

#define     __IR_OP__       (IR_O_PVTP_ + 1000)  /* O结果域的P界。*/
#define     IR_P         __FR_OP__		/* P结果(肯定性结果)的起点。*/
#define     IR_P_PRIVATE_     (IR_P + 10) /* <内部私有P结果的起点> */

/* >#define     IR_P_PRIVATE_    (IR_P + x)  /-* <内部私有P结果的起点> *-/ */
#define     IR_P_RCZERO       (IR_P_PRIVATE_ + 0) /* Close,对象引用计数变为0。*/
#define     IR_P_PVT_         (IR_P_PRIVATE_ + 50) /* <外部私有P结果的起点> */

/*
*
* 描述:对象接口执行结果否定性/中立性/肯定性检测定义。
* 备注:NIR --- Negative IRESULT;
*       OIR --- O  IRESULT;
*       PIR --- Positive IRESULT。
*/
#define     NIR(Result)      ( (IRESULT)(Result) <= __IR_ON__ )  
#define     OIR(Result)      ( ((IRESULT)(Result) > __IR_ON__) && ((IRESULT)(Result) < __IR_OP__) )
#define     PIR(Result)      ( (IRESULT)(Result) >= __IR_OP__ )   


/*
*
* 描述:对象交互行为分类定义。
* 备注:1. 从是否须要输入Byte流和有没有输出Byte流的角度,可将行为分为四种:
*          AC0 - 不需输入Byte流也没有输出Byte流;
*          AC1 - 不需要输入Byte流但有输出Byte流;
*          AC2 - 需要输入Byte流但没有输出Byte流;
*          AC3 - 即需要输入Byte流也有输出Byte流。
*
*       2. 有时,对象间交互需要输入Byte数据流或交互后有Byte数据流输出,或者即需要
*          输入Byte数据流又有Byte数据流输出。输入的数据流的类型必须是已知的,但输
*          出的数据流类型可以是未知的。
*
*       3. TSI和TSO
*          TSI - the Type of Stream Inputed,输入的数据流类型。
*          TSO - the Type of Stream Outputed,输出的数据流类型。
*/
#define     AC0        0  
#define     AC1        (1 << (sizeof(ACTION)*BYTBITS - 2))   
#define     AC2        (2 << (sizeof(ACTION)*BYTBITS - 2))   
#define     AC3        (3 << (sizeof(ACTION)*BYTBITS - 2))  

/* 判断交互行为种类的mask */
#define     MSKAC      (3 << (sizeof(ACTION)*BYTBITS - 2)) 

/*
*
* 描述:对象交互行为定义。
* 备注:=== 定义模板 ===
*    
*       /-** 非一个对象模专用的交互行为:**-/
*       #define     XXX_YYY         (ACx | (ACT_PVT_  + 0))  
*       #define     XXX_YYY         (ACx | (ACT_PVT_  + 1))  
*       ...     ...     ...     ...     ...     ...   
*       #define     XXX_YYY         (ACx | (ACT_PVT_  + x - 1))  
*	    #define    ACT_PVT_XXX_          (ACT_PVT_ + x)  /-* X1的私有交互行为起点。*-/
*
*       /-** X1对象模的私有交互行为:**-/
*       #define     XXX_YYY         (ACx | (ACT_PVT_XXX_  + 0))  
*       #define     XXX_YYY         (ACx | (ACT_PVT_XXX_  + 1))  
*       ...     ...     ...     ...     ...     ...   
*       #define     XXX_YYY         (ACx | (ACT_PVT_XXX_  + x - 1))  
*	    #define    ACT_PVT_YYY_          (ACT_PVT_XXX_ + x)  /-* X2的私有交互行为起点。*-/
*       ...     ...     ...     ...     ...     ...          
*/
#define    ACT_                0
#define    ASK_SHARED        (AC0 | (ACT_  + 0))   /* 问对象共享么。*/
#define    SET_SHARED         (AC0 | (ACT_  + 1))   /* 设置对象共享。*/
#define    SET_UNSHARED      (AC0 | (ACT_  + 2))   /* 设置对象非共享。*/
#define    SET_BLOCKI         (AC0 | (ACT_  + 3))   /* 设置对象阻断输入。*/
#define    SET_UNBLOCKI      (AC0 | (ACT_  + 4))   /* 设置对象非阻断输入。*/
#define    SET_BLOCKO        (AC0 | (ACT_  + 5))   /* 设置对象阻断输出。*/
#define    SET_UNBLOCKO      (AC0 | (ACT_  + 6))   /* 设置对象非阻断输出。*/
#define    GET_IQCTY          (AC1 | (ACT_  + 7))   /* 获取IQ容量。*/
#define    SET_IQCTY          (AC2 | (ACT_  + 8))   /* 设置IQ容量。*/
#define    GET_OQCTY         (AC1 | (ACT_  + 9))   /* 获取OQ容量。*/
#define    SET_OQCTY          (AC2 | (ACT_  + 10))   /* 设置OQ容量。*/
#define    CMD_RESET          (AC0 | (ACT_  + 11))  /* 重置。*/
#define    ACT_PVT_           (ACT_  + 50)    /* <外部私有交互行为的起点> */



/*
*
* 描述:函数执行结果定义,建议功能复杂或多返回值的函数使用。 
* 备注:=== 定义模板 ===
*
*       ...     ...     ...     ...     ...     ...    
*       ...     ...     ...     ...     ...     ...    
*       #define     FR_N_PVT_YYY_            (FR_N_PVT_XXX_ - x)  /-* X2的私有N结果起点。*-/
*       #define     FR_N_XXX            (FR_N_PVT_XXX_ - x + 1) 
*       ...     ...     ...     ...     ...     ... 
*       #define     FR_N_XXX            (FR_N_PVT_XXX_ -1) 
*       #define     FR_N_XXX            (FR_N_PVT_XXX_ -0) 
*       /-** X1函数的私有N结果:^ **-/
*
*       #define     FR_N_PVT_XXX_            (FR_N_PVT_ - x)  /-* X1的私有N结果起点。*-/
*       #define     FR_N_XXX            (FR_N_PVT_ - x + 1) 
*       ...     ...     ...     ...     ...     ...  
*       #define     FR_N_XXX            (FR_N_PVT_ -1) 
*       #define     FR_N_XXX            (FR_N_PVT_ -0) 
*       /-** 
*       ** 非一个函数专用的N结果:^
*       **-/
*
*       ...     ...     ...     ...     ...     ...    
*       ...     ...     ...     ...     ...     ...    
*       #define     FR_O_PVTN_YYY_           (FR_O_PVTN_XXX_ - x)  /-* X2的私有负O结果起点。*-/
*       #define     FR_O_XXX            (FR_O_PVTN_XXX_ - x + 1) 
*       ...     ...     ...     ...     ...     ... 
*       #define     FR_O_XXX            (FR_O_PVTN_XXX_ -1) 
*       #define     FR_O_XXX            (FR_O_PVTN_XXX_ -0) 
*       /-** X1函数的私有负O结果:^ **-/
* 
*       #define     FR_O_PVTN_XXX_           (FR_O_PVTN_ - x)  /-* X1的私有负O结果起点。*-/
*       #define     FR_O_XXX            (FR_O_PVTN_ - x + 1) 
*       ...     ...     ...     ...     ...     ...  
*       #define     FR_O_XXX            (FR_O_PVTN_ -1) 
*       #define     FR_O_XXX            (FR_O_PVTN_ -0) 
*       /-**
*       ** 非一个函数专用的负O结果:^ 
*       **
*       ** 非一个函数专用的正O结果:
*       **-/
*       #define     FR_O_XXX            (FR_O_PVTP_ + 0)  
*       #define     FR_O_XXX            (FR_O_PVTP_ + 1)  
*       ...     ...     ...     ...     ...     ...     
*       #define     FR_O_XXX            (FR_O_PVTP_ + x - 1)  
*       #define     FR_O_PVTP_XXX_           (FR_O_PVTP_ + x)  /-* X1的私有正O结果起点。*-/
*
*       /-** X1函数的私有正O结果:**-/
*       #define     FR_O_XXX            (FR_O_PVTP_XXX_ + 0)  
*       #define     FR_O_XXX            (FR_O_PVTP_XXX_ + 1)  
*       ...     ...     ...     ...     ...     ...    
*       #define     FR_O_XXX            (FR_O_PVTP_XXX_ + x - 1)  
*       #define     FR_O_PVTP_YYY_           (FR_O_PVTP_XXX_ + x)  /-* X2的私有正O结果起点。*-/
*       ...     ...     ...     ...     ...     ...    
*       ...     ...     ...     ...     ...     ...  
*  
*       /-** 
*       ** 非一个函数专用的P结果:
*       **-/ 
*       #define     FR_P_XXX            (FR_P_PVT_ + 0)  
*       #define     FR_P_XXX            (FR_P_PVT_ + 1)  
*       ...     ...     ...     ...     ...     ...     
*       #define     FR_P_XXX            (FR_P_PVT_ + x - 1)  
*       #define     FR_P_PVT_XXX_            (FR_P_PVT_ + x)  /-* X1的私有P结果起点。*-/
*
*       /-** X1函数的私有P结果:**-/
*       #define     FR_P_XXX            (FR_P_PVT_XXX_ + 0)  
*       #define     FR_P_XXX            (FR_P_PVT_XXX_ + 1)  
*       ...     ...     ...     ...     ...     ...    
*       #define     FR_P_XXX            (FR_P_PVT_XXX_ + x - 1)  
*       #define     FR_P_PVT_YYY_            (FR_P_PVT_XXX_ + x)  /-* X2的私有P结果起点。*-/
*       ...     ...     ...     ...     ...     ...    
*       ...     ...     ...     ...     ...     ...    
*  
*/
#define     FR_N_PVT_            (FR_N_PRIVATE_ - 50)  /* <外部私有N结果的起点> */

⌨️ 快捷键说明

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