Files
2026-02-01 22:23:06 +08:00

348 lines
13 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//=====================================================================
//--------------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位若数据位长度为67或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