#ifndef __PMC_TYPES_H__
#define __PMC_TYPES_H__
//是否使用模拟器
#define _WITH_SIMULATOR
//主Task的模块名称(即包含IO的模块）
#define TASK_IO_MODULE ModuleDevice
/*
* 下述最大值并没有做严格的安全检查，特别是release版本是不做检查的，请注意
*/
#define MAX_VALUE_LEN 128	//Device和SC参数值的最大长度
#define MAX_NAME_LEN 128	//属性或参数名称的最大长度
#define SHORT_NAME_LEN 50	//比较短的名称字符串长度
#define MAX_CONTEXT_LEN 256	//所有字符串内容的最大长度
#define MAX_DEVICE_COUNT 1024//最大设备个数
#define MAX_OP_COUNT 2048	//最大OP个数
#define MAX_PARAM_COUNT 20	//OP参数的最大个数
#define MAX_SUB_OP_COUNT 32	//最大sub op个数
#define TOTAL_SUB_OP_COUNT 256	//所有sub op加起来的累计个数
#define MAX_SC_COUNT 512	//最大配置项目（string和bool分别）个数
#define MAX_HOLD_DO_COUNT 64	//最大保持/脉冲点位个数
#define MAX_WAIT_DI_COUNT 64	//最大等待点位个数


typedef  bool PMCBOOL;
#define TASK_TM 50
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef NULL
#define NULL 0
#endif

#define SUFFIX_SERVICES .h
#define PREFIX_UNDERLINE_(s) _##s
#define PREFIX_UNDERLINE(s) PREFIX_UNDERLINE_(s)
#define MA_CONTACT_(a,b) a##b
#define MA_CONTACT(a,b) MA_CONTACT_(a,b)
#define MA_STR_(s) #s
#define MA_STR(s) MA_STR_(s)

extern void* ioModule;
typedef struct MA_CONTACT(PREFIX_UNDERLINE(TASK_IO_MODULE), NDI) M_NDI;
typedef struct MA_CONTACT(PREFIX_UNDERLINE(TASK_IO_MODULE), NDO) M_NDO;
typedef struct MA_CONTACT(PREFIX_UNDERLINE(TASK_IO_MODULE), SDI) M_SDI;
typedef struct MA_CONTACT(PREFIX_UNDERLINE(TASK_IO_MODULE), SDO) M_SDO;
typedef struct MA_CONTACT(PREFIX_UNDERLINE(TASK_IO_MODULE), AI) M_AI;
typedef struct MA_CONTACT(PREFIX_UNDERLINE(TASK_IO_MODULE), AO) M_AO;
extern M_AI* AI;
extern M_AO* AO;
extern M_NDI* NDI;
extern M_NDO* NDO;
extern M_SDI* SDI;
extern M_SDO* SDO;
#define INIT_MODULE_DEVICE { \
	AI=&m_AI;	\
	NDI=&m_NDI;	\
	SDI=&m_SDI;	\
	AO=&m_AO;	\
	NDO=&m_NDO;	\
	SDO=&m_SDO;	\
	ioModule=this;	\
	m_logger.create(&m_Trace, &m_TraceLevelMax); \
	logger=&m_logger;		\
}

#endif
