/************************************************************************
  深圳市台进科技有限公司@2013-2021
  技术支持
************************************************************************/

#ifndef	_xCCOMDEVICE_H
#define _xCCOMDEVICE_H

#ifdef XCCOMDEV_EXPORTS
#define XCCOMDEV_API extern "C" __declspec(dllexport)
#else
#define XCCOMDEV_API extern "C" __declspec(dllimport)
#endif


/************************************************************************
函数名：	ControllerInitialize
功能：
			指定的光源控制器初始化
参数：      
             ComNum: 控制器对应的串口号 取值范围1~10
返回值：    
            1：初始化成功     0：初始化失败
说明：     
            初始化失败原因：光源控制器未连接 或者 通讯端口号设置错误
/************************************************************************/
XCCOMDEV_API int  ControllerInitialize(int ComNum);

/************************************************************************
函数名：	ControllerClose
功能：
			指定的光源控制器通讯端口关闭
参数：
			ComNum: 控制器对应的串口号 取值范围1~10
返回值：
			1：关闭成功     0：关闭失败
说明：
			关闭失败原因：通讯端口号设置错误
			通讯端口关闭后，需要重新使用ControllerInitialize初始化光源控制器
/************************************************************************/
XCCOMDEV_API int  ControllerClose(int ComNum);

/************************************************************************
函数名：	IsControllerOnLine
功能：
			检测指定光源控制器是否在线
参数：      
             ComNum: 控制器对应的串口号 取值范围1~10
返回值：    
            1，光源控制器在线。0，光源控制器为离线状态。
说明：      
/************************************************************************/
XCCOMDEV_API int IsControllerOnLine(int ComNum);         

/************************************************************************
函数名：	SetControllerToBeOnLine
功能：
			将指定的光源控制器设置为在线状态
参数：      
             ComNum: 控制器对应的串口号 取值范围1~10
返回值：    
            无
说明：      
/************************************************************************/
XCCOMDEV_API void SetControllerToBeOnLine(int ComNum);  

/************************************************************************
函数名：	SetControllerToBeOffLine
功能：
			将指定的光源控制器设置为离线状态
参数：      
             ComNum: 控制器对应的串口号 取值范围1~10
返回值：    
            无
说明：      
/************************************************************************/
XCCOMDEV_API void SetControllerToBeOffLine(int ComNum); 

/************************************************************************
函数名：	GetControllerFirmwareVersion
功能：
			读取指定光源控制器内部固件的软件版本号。

输入参数：   ComNum: 控制器对应的串口号 取值范围1~10
输出参数：
			pVer0：从下位机读到的Version的第1字节输出到指针pVer0指向的变量中。
			pVer1：从下位机读到的Version的第2字节输出到指针pVer1指向的变量中。
			pVer2：从下位机读到的Version的第3字节输出到指针pVer2指向的变量中。
			pVer3：从下位机读到的Version的第4字节输出到指针pVer3指向的变量中。
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
说明：
			例如如果下位机中的软件版本是V1.2.3.4，那么调用本函数得到的数据是：
			*pVer0 == 1, *pVer1 == 2, *pVer2 == 3, *pVer3 == 4.
/************************************************************************/
XCCOMDEV_API int GetControllerFirmwareVersion(int ComNum, unsigned char *pVer0, unsigned char *pVer1, unsigned char *pVer2, unsigned char *pVer3);

/************************************************************************
函数名：	SetControllerIntensity
功能：
			设置指定光源控制器指定通道光源亮度
输入参数：
			ComNum: 控制器对应的串口号 取值范围1~10
			Channel：取值范围1~8，光源通道号。
			Data：取值范围0~1000，分别对应光源亮度输出0‰～1000‰.
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
注意：      
            调用此函数设置光源亮度需要执行EnableControllerOutput()函数才能开启光源。
/************************************************************************/
XCCOMDEV_API int SetControllerIntensity(int ComNum, unsigned char Channel, unsigned short Data);   

/************************************************************************
函数名：	GetControllerIntensity
功能：
			获取指定光源控制器上指定光源通道的亮度设置。
输入参数：
			ComNum: 控制器对应的串口号 取值范围1~10
			Channel：取值范围1~8，光源通道号。
输出参数：
			pResult：读取到的亮度输出值输出到pResult指向的int型变量中。该变量的含义同SetControllerIntensity()函数中的参数Data。
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
/************************************************************************/
XCCOMDEV_API int GetControllerIntensity(int ComNum, unsigned char Channel, unsigned short *pResult);

/************************************************************************
函数名：	EnableControllerOutput
功能：
			使能指定控制器上所有光源通道输出。
输入参数：  
			ComNum: 控制器对应的串口号 取值范围1~10
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
说明：
			该函数执行一次即可。
/************************************************************************/
XCCOMDEV_API int EnableControllerOutput(int ComNum);  

/************************************************************************
函数名：	DisableControllerOutput
功能：
			禁能指定控制器上所有光源通道输出，即同时关闭指定控制器上所有光源通道的输出。
输入参数:
			ComNum: 控制器对应的串口号 取值范围1~10
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
说明：
			
/************************************************************************/
XCCOMDEV_API int DisableControllerOutput(int ComNum);     

/************************************************************************
函数名：	SetUserCode
功能：
			设置指定控制器上用户自定义代码，此代码将保存在下位机Flash存储器中。
输入参数：
			ComNum: 控制器对应的串口号 取值范围1~10
			pStr：  100字节长度字符串
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
注意：      
            此功能需要下位机固件支持。
			字符串长度固定为100Byte，如果不足100Byte请补足0xFF。
/************************************************************************/
XCCOMDEV_API int SetUserCode(int ComNum, unsigned char* pStr); 


/************************************************************************
函数名：	GetUserCode
功能：
			获取指定控制器上用户自定义代码
输入参数： 
			ComNum: 控制器对应的串口号 取值范围1~10
输出参数：
			pStr：  100字节长度字符串
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
注意：      
            此功能需要下位机固件支持。
/************************************************************************/
XCCOMDEV_API int GetUserCode(int ComNum, unsigned char *pStr); 

/************************************************************************
函数名：	SetTrigPara
功能：
			设置指定控制器上指定通道光源触发亮度
输入参数：
			ComNum: 控制器对应的串口号 取值范围1~10
			Channel: 取值范围1～4
			TrigWidth : 0~1000 ms
			TrigIntensity:取值范围0~1000
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
注意：      
            此功能需要硬件支持。暂不支持8通道光源控制器
/************************************************************************/
XCCOMDEV_API int SetTrigPara(int ComNum, unsigned char Channel, unsigned short TrigWidth, unsigned short TrigIntensity);  

/************************************************************************
函数名：	GetTrigPara
功能：
			获取指定控制器上指定通道光源触发亮度
输入参数：
			ComNum: 控制器对应的串口号 取值范围1~10
			Channel: 取值范围1～4
输出参数：
			*pWidth :  触发宽度
			*pIntensity: 触发亮度
返回值：
			int 型变量。0：有错误发生，函数执行失败。1：函数执行成功。
注意：      
            此功能需要硬件支持。暂不支持8通道光源控制器
/************************************************************************/
XCCOMDEV_API int GetTrigPara(int ComNum, unsigned char Channel, unsigned short *pWidth, unsigned short *pIntensity);

#endif