// 本头文件内容不提供技术支持
#ifndef  _ART_DAM3000M_RSV_
#define _ART_DAM3000M_RSV_

#include <windows.h>

// 驱动函数接口
#ifndef DEFINING
#define DEVAPI __declspec(dllimport)
#else
#define DEVAPI //__declspec(dllexport)
#endif


// 数据包显示相关
#define QUEUE_MESSAGE_TYPE_SEND		0x00
#define QUEUE_MESSAGE_TYPE_RECV		0x01

#define PACK_FIFO_SIZE				100

typedef struct _MsgQ_
{
	LONG lComNum;		// 数据包所属串口号
// 	LONG lDevID;		// 数据包所属设备ID
	LONG lMsgType;		// 0=发送数据 1=接收数据
	char chMsg[2048];	// 目前每次接收最大数据量2048
	LONG lMsgLen;		// 数据长度
}MsgQ, *PMsgQ;

#ifdef __cplusplus
extern "C" {
#endif

// ****************附加功能接口********************************************************************

WORD DEVAPI	FAR	PASCAL DAM3000M_CRCVerify (					// 计算数据的CRC
								BYTE *puchMsg,				// 数据
								WORD usDataLen);			// 数据长度

BOOL DEVAPI FAR PASCAL DAM3000M_WriteReadChar(				// 写读设备，实现一个发收数据过程
								HANDLE	hDevice,			// 设备对象句柄
								CHAR*	chWriteBuf,			// 写的数据
								LONG	lWlength,			// 数据长度
								CHAR*	chReadBuf,			// 读到的数据
								LONG*	lRlength,			// 数据长度
								LONG	timeout);	 		// 接收数据超时等待时间

BOOL DEVAPI FAR PASCAL DAM3000M_InitPackageEvent(			// 初始化获取通信数据包事件句柄
								HANDLE hDevice,				// 设备对象句柄
								HANDLE hWREvent);			// 有数据包事件

BOOL DEVAPI FAR PASCAL DAM3000M_GetPackage(					// 获取通信数据包
								HANDLE hDevice,				// 设备对象句柄
								LONG *lPackageCount,		// 数据包个数（<=100）
								MsgQ lPackage[100]);		// 数据包数组

BOOL DEVAPI FAR PASCAL DAM3000M_EnablePacketsGap(			// 设置数据包之间时间间隔 10ms
								 HANDLE hDevice,			// 设备对象句柄
								 BOOL bEnable,				// 是否使能 0-不使能 1-使能
								 LONG lGapTime = 10);		// 间隔时间，默认10ms	

// 
// // 注册进行一次读写就执行的回调事件 __cdecl
// typedef LONG	(__cdecl *CommDataCallbackPtr)(HANDLE hDevice, void* callbackData, void* msgData);
// LONG DEVAPI FAR PASCAL	DAM3000M_RegisterCommDataCallback(HANDLE hDevice, CommDataCallbackPtr callbackFunction, void *callbackData);
//  





#ifdef __cplusplus
}
#endif

//#######################################################################
// 自动包含驱动函数导入库
#ifndef DEFINING
#ifndef _WIN64
#pragma comment(lib, "DAM3000M_32.lib")
#pragma message("======== Welcome to use our art company's products!")
#pragma message("======== Automatically linking with DAM3000M_32.dll...")
#pragma message("======== Successfully linked with DAM3000M_32.dll")
#else
#pragma comment(lib, "DAM3000M_64.lib")
#pragma message("======== Welcome to use our art company's products!")
#pragma message("======== Automatically linking with DAM3000M_64.dll...")
#pragma message("======== Successfully linked with DAM3000M_64.dll")
#endif // _WIN64
#endif // DEFINING

#endif // ifndef _ART_DAM3000M_RSV_
