#ifndef USB7660_H
#define USB7660_H
#ifdef USB7KCTRANS_EXPORTS
#define ZT_API __declspec(dllexport)
#else
#define ZT_API __declspec(dllimport)
#endif
//定义错误号
#define ZT_SUCCESS 0 //无错误
#define ERR_PARAMETER1 1 //参数1错
#define ERR_PARAMETER2 2 //参数2错
#define ERR_PARAMETER3 3 //参数3错
#define ERR_PARAMETER4 4 //参数4错
#define ERR_PARAMETER5 5 //参数5错
#define ERR_PARAMETER6 6 //参数6错
#define ERR_PARAMETER7 7 //参数7错
#define ERR_PARAMETER8 8 //参数8错
#define ERR_PARAMETER9 9 //参数9错
#define ERR_PARAMETER10 10 //参数10错
#define ERR_PARAMETER11 11 //参数11错
#define ERR_PARAMETER12 12 //参数12错
#define ERR_PARAMETER13 13 //参数13错
#define ERR_PARAMETER14 14 //参数14错
#define ERR_PARAMETER15 15 //参数15错
#define ERR_PARAMETER16 16 //参数16错
#define ERR_PARAMETER17 17 //参数17错
#define ERR_PARAMETER18 18 //参数18错
#define ERR_PARAMETER19 19 //参数19错
#define ERR_PARAMETER20 20 //参数20错
#define ERR_PARAMETER_BASEADDR 21 //针对ISA卡,板卡基地址超出范围,基地址应该为0x100至0x3F0之间未被系统占用的地址
#define ERR_PARAMETER_CARDNO 22 //针对PCI卡,板卡索引号超出范围,这版驱动中板卡索引号默认从1开始
#define ERR_PARAMETER_CHMODE 23 //通道方式参数错误,通道方式超出范围,一般只有0--3共4种方式
#define ERR_PARAMETER_CH 24 //通道号参数错误,通道号超出范围
#define ERR_PARAMETER_CHIP 25 //芯片号参数错误,芯片号超出范围
#define ERR_PARAMETER_PORT 26 //口号参数错误,口号超出范围
#define ERR_PARAMETER_AI_RANGE 27 //AD量程参数错,此卡不支持这种AD输入量程
#define ERR_PARAMETER_AI_AMP 28 //AD增益参数错
#define ERR_PARAMETER_AI_STARTMODE 29 //AD启动方式参数错
#define ERR_PARAMETER_AO_RANGE 30 //DA量程参数错,此卡不支持这种DA输出量程
#define ERR_PARAMETER_ADFREQ 31 //AD采集频率(或AD分频系数)参数错
#define ERR_PARAMETER_IRQ 32 //与中断相关参数错,可能是此卡不支持这种中断方式或中断号
#define ERR_PARAMETER_NULL_POINTER 33 //空指针错。原因:缓冲区首地址为空或者用户传入的参数导致引用到空指针
#define ERR_AD_OVERTIME 34 //AD超时。对于ISA卡,出错原因可能是:未插卡或IO地址与板卡上设置不匹配。当用定时启动AD或外触发启动AD时,一般不应检查AD是否超时
#define ERR_OPEN_DEVICE 35 //打开设备失败,对于PCI卡,出错原因可能是:未插卡或未装驱动,或dll与sys版本不一致
#define ERR_CLOSE_DEVICE 36 //关闭设备失败
#define ERR_TIMING 37 //定时未到或外触发脉冲未到
#define ERR_IOADDR_DA_OVERTIME 38 //带光隔DA写过程超时
#define ERR_OPEN_IRQ 39 //打开中断出错
#define ERR_FUNC_CANNT_RUN 40 //此函数不能在这台计算机上运行
#define ERR_ASYNC_FUNC_FAILED 41 //异步函数调用失败
#define ERR_FUNC_OPERATE 42 //在当前的卡的设置状态下,不应该调用此函数
#define ERR_EXCHANGE_DATA 43 //与底层驱动之间交换数据出错
#define ERR_CANT_FIND_FIRST_CH 44 //无法找到第一个通道的标志位
extern "C"
{
ZT_API long _stdcall ZT7660_GetCardCount();
//函数功能:返回当前可使用的设备数量,注意这个函数必须在打开设备之前调用
//
//入口参数:
//返回值: 大于等于0 当前可使用设备数量
// -1 表失败,已经调用过ZT7660_OpenDevice函数
ZT_API long _stdcall ZT7660_OpenDevice(unsigned long cardNO);
//函数名称:ZT7660_OpenDevice
//函数功能:打开设备。必须在调用其他函数之前调用。
// 放在程序初始化时调用比较恰当,只调用一次即可
//入口参数:
// cardNO:模块号,默认从 1 开始
// 如果系统中只用了一个USB模块,令这个参数为1就行了
//返回值: 0 表成功
// -1 表失败,应该进一步调用 ZT7660_GetLastErr 判断出错原因
ZT_API long _stdcall ZT7660_CloseDevice(unsigned long cardNO);
//函数名称:ZT7660_CloseDevice
//函数功能:关闭指定的设备
//
//入口参数:
// cardNO:模块号,默认从 1 开始
// 如果系统中只用了一个USB模块,令这个参数为1就行了
//返回值: 0 表成功
// -1 表失败,应该进一步调用 ZT7660_GetLastErr 判断出错原因
ZT_API unsigned long _stdcall ZT7660_GetLastErr();
//函数名称:ZT7660_GetLastErr
//函数功能:得到当前错误号。如果错误号为0表示无错误
//返回值:错误代码,错误代码含义请看宏定义
ZT_API void _stdcall ZT7660_ClearLastErr();
//函数名称:ZT7660_ClearLastErr
//函数功能:清除错误号。
// 注意:一旦产生错误,为了使函数重新正常执行,必须清除错误号
//返回值:无
ZT_API void _stdcall ZT7660_SetBaseNO(unsigned long baseNO);
//函数名称:ZT7660_SetBaseNO
//函数功能:设置板卡索引号(cardNO),芯片号(chipNO),口号(portNO)和通道号(chNO),
// 总之带“NO”后缀的参数是从0开始还是从1开始。默认为从1开始
// 建议不要调用这个函数
//入口参数:
// baseNO:只能设为0或1
//返回值:无
ZT_API long _stdcall ZT7660_GetBaseNO();
//函数名称:ZT7660_GetBaseNO
//函数功能:返回当前板卡索引号(cardNO),芯片号(chipNO),口号(portNO)和通道号(chNO),
// 总之带“NO”后缀的参数是从0开始还是从1开始。默认为从1开始
//返回值:返回0 表从0开始
// 返回1 表从1开始
ZT_API long _stdcall ZT7660_AIonce(unsigned long cardNO,
unsigned long chMode,
unsigned long chNO,
unsigned long AIrange,
unsigned long AIAmp,
unsigned long ADstartMode,
unsigned long ADfreq,
unsigned long ABflag,
unsigned long ch1Flag,
unsigned long ADctrlWord,
unsigned long ADoverTime);
//函数名称:ZT7660_AIonce
//函数功能:对指定通道进行单次数据采集。不需要先调用 ZT7660_AIinit
//
//入口参数:
// cardNO:模块号,默认从 1 开始。有关这个参数的详细说明,请参考 ZT7660_OpenDevice 函数
// chMode:通道方式
// 0 = 表示单端,固定单通道方式
// 2 = 表示双端,固定单通道方式
// chNO:通道号
// 当chMode = 0 时,为通道号(1--48)
// 当chMode = 2 时,为通道号(1--24)
// AIrange:选择对采集到的AD原码值做何种变换,应该与AD采集量程(一般需跳线)相匹配:
// AIrange = 0,表示返回原码值,所有卡都有这种方式。
// 对于12位的卡返回 0~4095 之间的值
// 对于16位的卡返回 0~65535 之间的值
// AIrange = 1,表示把原码值转化为 0 -- 5000mV 之间的值,如果此卡没有这种量程,不应选这种方式
// AIrange = 2,表示把原码值转化为 0 -- 10000mV 之间的值,如果此卡没有这种量程,不应选这种方式
// AIrange = 5,表示把原码值转化为 -5000 -- 5000mV 之间的值,如果此卡没有这种量程,不应选这种方式
// AIAmp:程控增益系数(0~2)。
// 0 = 1倍增益(无增益);1 = 10倍增益;2 = 100倍增益
// ADstartMode:保留。保持此参数为0
// ADfreq:保留。保持此参数为0
// ABflag:设置模块为A型(12bit)还是B型(16bit)
// 0 = A型;1 = B型
// ch1Flag:保留。保持此参数为0
// ADctrlWord:一般保持此参数为0。
// 若此参数不为0,函数将直接用这个参数的值初始化AD,而对其他影响AD方式的参数,
// 例如chMode、AIrange、AIAmp、ABflag、ch1Flag的值不予考虑。
// 此参数的说明请参考说明书中对 usb7660AI 函数的lCode参数的说明。
// ADoverTime:保留。保持这个参数为0
//返回值: 不等于 -1,表采集到的AD结果
// -1 ,当 ZT7660_GetLastErr 返回值等于 0 时,表AD结果
// 当 ZT7660_GetLastErr 返回值小于 0 时,表失败
ZT_API long _stdcall ZT7660_AIinit(unsigned long cardNO,
unsigned long chMode,
unsigned long chNO,
unsigned long AIrange,
unsigned long AIAmp,
unsigned long ADstartMode,
unsigned long ADfreq,
unsigned long ABflag,
unsigned long ch1Flag,
unsigned long ADctrlWord,