348 lines
13 KiB
C
348 lines
13 KiB
C
//=====================================================================
|
||
//--------------File - CHR34XXX_lib.h------------------
|
||
//
|
||
//-------Library for accessing the CHR34XXX card--
|
||
//
|
||
//-----------------CHR Corporation---------------------------
|
||
//
|
||
//----- Author:jacktong DATE:2011-05-27 ---------------
|
||
//
|
||
//=====================================================================
|
||
#ifndef _CHR34XXX_LIB_H_
|
||
#define _CHR34XXX_LIB_H_
|
||
|
||
#include <windows.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#define DLL __declspec(dllimport)
|
||
#pragma comment(lib,"CHR34XXX.lib")
|
||
|
||
|
||
|
||
#ifndef _CHR_DEF_
|
||
#define _CHR_DEF_
|
||
#define IN
|
||
#define OUT
|
||
#define CHR_UINT8 BYTE
|
||
#define CHR_UINT16 USHORT
|
||
#define CHR_UINT32 DWORD
|
||
#define CHR_UINT64 unsigned __int64
|
||
#define CHR_INT8 CHAR
|
||
#define CHR_INT16 SHORT
|
||
#define CHR_INT32 LONG
|
||
#define CHR_INT64 signed __int64
|
||
#define CHR_HANDLE HANDLE
|
||
#endif
|
||
|
||
|
||
#ifndef _CHRUART_DEF_
|
||
#define _CHRUART_DEF_
|
||
|
||
#define UART_WORKTYPE_SYNC 0 //板卡工作类型选择同步
|
||
#define UART_WORKTYPE_ASYN 1 //板卡工作类型选择异步
|
||
#define UART_WORKMODE_232 0 //板卡工作模式选择RS232
|
||
#define UART_WORKMODE_422 1 //板卡工作模式选择RS422
|
||
#define UART_WORKMODE_485 2 //板卡工作模式选择RS485
|
||
|
||
#define CHR_UART_DATABITS_5 0x05 // 5位
|
||
#define CHR_UART_DATABITS_6 0x06 // 6位
|
||
#define CHR_UART_DATABITS_7 0x07 // 7位
|
||
#define CHR_UART_DATABITS_8 0x08 // 8位
|
||
#define CHR_UART_STOPBITS_1 0x00 // 1位
|
||
#define CHR_UART_STOPBITS_2 0x01 // 1.5位(若数据位长度为 5位时)或2位(若数据位长度为6,7或8位)
|
||
#define CHR_UART_PARITY_NONE 0x00 // 无校验
|
||
#define CHR_UART_PARITY_HAVE 0x01 // 有校验
|
||
#define CHR_UART_PARITY_ODD 0x01 // 奇校验
|
||
#define CHR_UART_PARITY_EVEN 0x02 // 偶校验
|
||
#define CHR_UART_PARITY_MARK 0x03 // mark校验
|
||
#define CHR_UART_PARITY_SPACE 0x04 // space校验
|
||
#endif
|
||
|
||
|
||
#ifndef __CHR_DEVBUSST__
|
||
#define __CHR_DEVBUSST__
|
||
typedef struct _CARD_ADDR
|
||
{
|
||
LARGE_INTEGER phyAddr; // 地址
|
||
ULONG u32Lenght; // 长度
|
||
ULONG bIsPort; // 类型 CmResourceTypePort 端口 CmResourceTypeMemory 内存 CmResourceTypeInterrupt 中断
|
||
}CARD_ADDR, *PCARD_ADDR;
|
||
typedef struct _CHR_DEVBUSST_
|
||
{
|
||
WORD wdDevID;
|
||
WORD wdVenID;
|
||
WORD wdSubDevID;
|
||
WORD wdSubVenID;
|
||
WORD wdBusNum; //总线号
|
||
WORD wdDevNum; //设备号
|
||
WORD wdFunNum; //功能号
|
||
WORD wdIrqNum; //中断号
|
||
|
||
ULONG ulBaseAddrCount; //分配空间数目
|
||
CARD_ADDR stBaseAddr[6];
|
||
}CHR_DEVBUSST, *pCHR_DEVBUSST;
|
||
#endif
|
||
|
||
#ifndef __CHR_DEVPARST__
|
||
#define __CHR_DEVPARST__
|
||
typedef struct _CHR_DEVPARST_
|
||
{
|
||
DWORD dwCardType;
|
||
DWORD dwhwVersion;
|
||
DWORD dwdvrVersion;
|
||
DWORD dwlibVersion;
|
||
DWORD dwBoardID;
|
||
DWORD dwSN;
|
||
DWORD dwChMax;
|
||
}CHR_DEVPARST, *pCHR_DEVPARST;
|
||
#endif
|
||
|
||
|
||
#ifndef __CHRUART_CFGST__
|
||
#define __CHRUART_CFGST__
|
||
typedef struct _CHRUART_CFGST_
|
||
{
|
||
CHR_UINT32 BaudRate; //通道波特率代码
|
||
CHR_UINT32 Parity; //校验方式
|
||
CHR_UINT32 DataNum; //数据位个数
|
||
CHR_UINT32 StopNum; //停止位个数
|
||
} CHRUART_CFGST, *pCHRUART_CFGST;
|
||
typedef struct _CHRUART_RXMODEST_
|
||
{
|
||
DWORD IsProtocol;
|
||
DWORD SumCheckEN;
|
||
DWORD HeadIncluded;
|
||
DWORD ProtocolSel;
|
||
} CHRUART_RXMODEST,*pCHRUART_RXMODEST;
|
||
typedef struct _CHRUART_ASYN_FRAMEFORMATST_
|
||
{
|
||
BYTE HDR;
|
||
BYTE EDR;
|
||
BYTE TailA;
|
||
BYTE TailB;
|
||
BYTE LENR;//数据帧长度
|
||
} CHRUART_ASYN_FRAMEFORMATST,*pCHRUART_ASYN_FRAMEFORMATST;
|
||
typedef struct _CHRUART_SYNC_FRAMEFORMATST_
|
||
{
|
||
BYTE HR[4];
|
||
BYTE ER[4];
|
||
} CHRUART_SYNC_FRAMEFORMATST,*pCHRUART_SYNC_FRAMEFORMATST;
|
||
#endif
|
||
|
||
#ifndef __CHR_HANDLE__
|
||
#define __CHR_HANDLE__
|
||
typedef struct _ST_DEVDSC_
|
||
{
|
||
HANDLE hCard;
|
||
BYTE CardId;
|
||
}ST_DEVDSC, *HDEVICE;
|
||
#endif
|
||
|
||
//板卡API
|
||
DLL BOOL __stdcall CHR34XXX_Open (OUT HDEVICE *phDevice, IN BYTE CardId);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_Close (IN HDEVICE hDevice);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_Reset (IN HDEVICE hDevice);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_GetDevParInfo (IN HDEVICE hDevice,OUT pCHR_DEVPARST pstDevParInfo);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_GetDevBusInfo (IN HDEVICE hDevice,OUT pCHR_DEVBUSST pstDevBusInfo);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_CreateIntEvt(IN HDEVICE hDevice, OUT HANDLE *phEvt);
|
||
DLL DWORD __stdcall CHR34XXX_WaitIntEvt (IN HDEVICE hDevice,IN HANDLE hEvt ,IN DWORD dwMilliseconds);
|
||
DLL BOOL __stdcall CHR34XXX_CloseIntEvt(IN HDEVICE hDevice,IN HANDLE hEvt );
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||
//串口API
|
||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
//设置串口的工作模式为232、422、485
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SetWorkMode (IN HDEVICE hDevice,IN BYTE btCh,IN BYTE btWorkMode);
|
||
DLL BOOL __stdcall CHR34XXX_Ch_GetWorkMode (IN HDEVICE hDevice,IN BYTE btCh,OUT BYTE *btWorkMode);
|
||
|
||
|
||
//设置串口的工作类型 blASYN: 1(异步串口), 0(同步串口)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SetWorkType(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltASYN);
|
||
DLL BOOL __stdcall CHR34XXX_Ch_GetWorkType(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE *bltASYN);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SetLineCtrl (IN HDEVICE hDevice,IN BYTE btCh, IN pCHRUART_CFGST pstRSCFG );
|
||
//DLL BOOL __stdcall CHR34XXX_Ch_GetLineCtrl (IN HDEVICE hDevice,IN BYTE btCh, OUT pCHRUART_CFGST pstRSCFG );
|
||
|
||
//异步串口波特率计算说明如下
|
||
//波特独立设置[串口波特率BaudRate = 48000000 /((FP+1)× DIV))]
|
||
//FP范围(10~24)
|
||
//DIV范围(1~4095)
|
||
|
||
//同步串口波特率计算说明如下
|
||
//波特独立设置[串口波特率BaudRate = 96000000 / DIV ]
|
||
//DIV范围(12~4095)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_GetFP2DIV(IN HDEVICE hDevice,IN BYTE btCh,WORD *FP,WORD *DIV);
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SetFP2DIV(IN HDEVICE hDevice,IN BYTE btCh,WORD FP,WORD DIV);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_Ch_ASYN_485SelfTest(IN HDEVICE hDevice, IN BYTE btCh,IN BYTE bltEnabled);
|
||
|
||
//异步串口通道复位
|
||
DLL BOOL __stdcall CHR34XXX_Ch_ASYN_Reset (IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//设置异步串口数据接收模式
|
||
DLL BOOL __stdcall CHR34XXX_Ch_ASYN_SetRxMode(IN HDEVICE hDevice,IN BYTE btCh,
|
||
IN pCHRUART_RXMODEST pstRxMode);
|
||
|
||
//设置异步串口协议帧格式
|
||
DLL BOOL __stdcall CHR34XXX_Ch_ASYN_SetFrameFormat(IN HDEVICE hDevice,IN BYTE btCh,
|
||
IN pCHRUART_ASYN_FRAMEFORMATST pstFrameFormat);
|
||
|
||
//设置异步串口发送数据的字间间隔
|
||
DLL BOOL __stdcall CHR34XXX_Ch_ASYN_SetWordGap(IN HDEVICE hDevice,IN BYTE btCh,IN DWORD dwGap);
|
||
|
||
|
||
//获取异步串口接收FIFO里的数据量。(仅适用于异步串口的透明接收)
|
||
DLL DWORD __stdcall CHR34XXX_Ch_ASYN_GetRxFIFOCnt(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//设置接收缓冲区触发深度,即设置接收缓冲区触发数据量。当缓冲区中的数据量大于触发深度时,表示触发到达。
|
||
DLL BOOL __stdcall CHR34XXX_Ch_ASYN_SetRxTriggerDepth(IN HDEVICE hDevice,IN BYTE btCh,IN DWORD Depth);
|
||
|
||
//读取FIFO接收数据
|
||
DLL BOOL __stdcall CHR34XXX_Ch_ASYN_Read (IN HDEVICE hDevice,IN BYTE btCh,IN DWORD dwLen,
|
||
OUT BYTE *pbtRxBuf, OUT DWORD *dwResult);
|
||
|
||
|
||
|
||
|
||
//设置同步串口协议帧格式
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_SetFrameFormat(IN HDEVICE hDevice,IN BYTE btCh,
|
||
IN pCHRUART_SYNC_FRAMEFORMATST pstFrameFormat);
|
||
//设置同步串口的本地地址
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_SetAddress(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE btLocalAddr);
|
||
|
||
//设置同步串口CRC校验的初始值
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_SetCrcInitVal(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltCrcVal);
|
||
|
||
//设置同步串口CRC的发送的顺序,即低位字节或高位字节在前
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_SetCrcTxOrder(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltHighFirst);
|
||
|
||
//设置同步串口接收数据的时钟边沿
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_RxEdgeSelect(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltRaiseEdge);
|
||
|
||
//设置同步串口数据帧前后同步字“0x7E”的数量
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_SetSynWordCnt(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE btCnt);
|
||
|
||
//使能/禁用同步串口监听模式
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_ListenModeEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltEnabled);
|
||
|
||
//使能/禁用同步串口接收错误统计
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_ErrAnalyseEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltEnabled);
|
||
|
||
//使能/禁用站地址与本地地址不一致错误检测。(使能同步串口接收错误统计时有效)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_ErrAddrEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltADDR_ERR);
|
||
|
||
//使能/禁用同步串口CRC校验错误检测。(使能同步串口接收错误统计时有效)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_ErrCrcEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltCRC_ERR);
|
||
|
||
//使能/禁用同步串口同步字0x7E异常结束错误检测。同步字0x7E异常结束错误,是指在接收数据时,
|
||
//当前数据的所有数据位未接收完,就检测到了同步字0x7E。(使能同步串口接收错误统计时有效)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_ErrEndEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltEND_ERR);
|
||
|
||
//使能/禁用同步串口数据编码错误检测。数据编码错误是指在接收数据时,数据中出现了连续的6个‘1’,导致接收异常,
|
||
//正常情况下发送过程中数据中出现连续的5个‘1’将在其后插入一位‘0’。(使能同步串口接收错误统计时有效)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_ErrCodeEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltCODE_ERR);
|
||
|
||
//使能/禁用同步串口少数错误检测。少数是指数据在接收时,还未检测到同步字0x7E结尾,同步时钟就已经没有了。
|
||
//(使能同步串口接收错误统计时有效)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_ErrLoseEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltLOSE_ERR);
|
||
|
||
//设置同步串口发送数据时钟边沿
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_TxEdgeSelect(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltRaiseEdge);
|
||
|
||
//设置同步串口定时发送的帧ID
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SYNC_SetFrameId(IN HDEVICE hDevice,IN BYTE btCh,IN WORD wdIdNum,
|
||
IN WORD wdIdPos, IN WORD wdMSBFirst);
|
||
//设置定时发送帧间间隔
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SetTxFrameGap(IN HDEVICE hDevice,IN BYTE btCh,IN DWORD dwGap);
|
||
|
||
//使能/禁用超时丢帧统计。(仅适用于“同步串口通讯”和“异步串口协议通讯”)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_FM_TimeOutEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltEnabled);
|
||
|
||
//设置超时丢帧时间。(仅适用于“同步串口通讯”和“异步串口协议通讯”)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_FM_SetResponseTimeout(IN HDEVICE hDevice, IN BYTE btCh,IN DWORD dwT);
|
||
|
||
//设置接收FIFO模式。(仅适用于异步串口协议接收和同步串口接收)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_FM_RFModeEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltEnable);
|
||
|
||
//读取当前缓冲区中的帧数量。(仅适用于异步串口的协议接收和同步串口接收)
|
||
DLL DWORD __stdcall CHR34XXX_Ch_FM_GetRxFrameCnt(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//读取FIFO接收数据帧,每调用一次此函数,仅从FIFO中读取一个数据帧。
|
||
//(仅适用于异步串口协议接收和同步串口的“FIFO接收”模式)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_FM_ReadFrame(IN HDEVICE hDevice,IN BYTE btCh, IN DWORD dwLen,
|
||
OUT BYTE *pbtRxBuf, OUT DWORD *dwResult);
|
||
//从接收FIFO缓冲区中一次读取多个数据帧。(仅适用于异步串口协议接收和同步串口的“FIFO接收”模式)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_FM_ReadFrameEx(IN HDEVICE hDevice,IN BYTE btCh,
|
||
IN DWORD dwNumberOfFramesToRead,
|
||
IN DWORD dwNumberOfBytesToRead,
|
||
OUT BYTE *pbtRxBuf,
|
||
OUT DWORD *dwNumberOfBytesRead,
|
||
OUT DWORD *dwNumberOfFramesRead);
|
||
|
||
//读取刷新接收数据帧。(仅适用于异步串口协议接收和同步串口的“刷新接收”模式)
|
||
DLL DWORD __stdcall CHR34XXX_Ch_FM_ReadFrame_Refresh(IN HDEVICE hDevice,IN BYTE btCh,
|
||
IN DWORD dwLen, OUT BYTE *pbtRxBuf,OUT DWORD *dwResult);
|
||
|
||
//使能/禁用接收中断
|
||
DLL BOOL __stdcall CHR34XXX_Ch_RxIntEnable(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltEnabled);
|
||
|
||
//开始/停止数据的接收
|
||
DLL BOOL __stdcall CHR34XXX_Ch_RxStart(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltEnabled);
|
||
|
||
//清空接收缓冲区。此操作仅清空接收缓冲区的数据量、空标志、满标志,不对溢出标志有影响。
|
||
DLL BOOL __stdcall CHR34XXX_Ch_ResetRxFIFO(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//清接收缓冲区溢出标志
|
||
DLL BOOL __stdcall CHR34XXX_Ch_Clr_OF_Flag(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//获取超时丢帧数量
|
||
DLL DWORD __stdcall CHR34XXX_Ch_FM_GetTimeOutFrameCnt(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//超时丢帧数量清零
|
||
DLL BOOL __stdcall CHR34XXX_Ch_FM_ClrTimeOutFrameCnt(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//获取接收FIFO的状态
|
||
DLL BYTE __stdcall CHR34XXX_Ch_GetRxFIFOStatus(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//设置串口数据发送模式(“定时发送”或“非定时发送”)
|
||
DLL BOOL __stdcall CHR34XXX_Ch_SetTxMode(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltTiming);
|
||
|
||
//开始/停止定时发送
|
||
DLL BOOL __stdcall CHR34XXX_Ch_TxStart(IN HDEVICE hDevice,IN BYTE btCh,IN BYTE bltEnabled);
|
||
|
||
//获取硬件发送FIFO的状态
|
||
DLL BYTE __stdcall CHR34XXX_Ch_GetTxFIFOStatus(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//获取发送FIFO里的数据量
|
||
DLL DWORD __stdcall CHR34XXX_Ch_GetTxFIFOCnt(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
//读取FIFO接收数据
|
||
DLL BOOL __stdcall CHR34XXX_Ch_Write(IN HDEVICE hDevice,IN BYTE btCh, IN DWORD dwLen,
|
||
OUT BYTE *pbtTxBuf, OUT DWORD *dwResult);
|
||
|
||
|
||
DLL BOOL __stdcall CHR34XXX_EEPROM_WP_Off(IN HDEVICE hDevice,BOOL Off);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_EEPROM_Write(IN HDEVICE hDevice,BYTE Addr,WORD usData);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_EEPROM_Read(IN HDEVICE hDevice,BYTE Addr,WORD *pusData);
|
||
|
||
DLL BOOL __stdcall CHR34XXX_Ch_Write_test(IN HDEVICE hDevice,IN BYTE btCh);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif
|
||
|