|
|
/*********************************************************************
|
|
|
*文件说明: 串口控制类
|
|
|
*作者: logos
|
|
|
*日期: 2018/11/09
|
|
|
*修改日志: 2018/11/09 create
|
|
|
|
|
|
***********************************************************************/
|
|
|
#pragma once
|
|
|
#ifndef _DLL_INCLUDE_COMPORT_H
|
|
|
#define _DLL_INCLUDE_COMPORT_H
|
|
|
|
|
|
#ifndef EXPORT_C
|
|
|
#define EXPORT_C extern "C"
|
|
|
#endif
|
|
|
|
|
|
#ifndef WINAPI
|
|
|
#define WINAPI __stdcall
|
|
|
#endif
|
|
|
|
|
|
enum EMParity
|
|
|
{//波特率
|
|
|
EMP_NO = 0, //无校验位
|
|
|
EMP_ODD, //奇校验
|
|
|
EMP_EVEN, //偶校验
|
|
|
EMP_MARK, //mark
|
|
|
EMP_SPACE, //space
|
|
|
};
|
|
|
|
|
|
enum EMByteSize
|
|
|
{//数据位
|
|
|
EMD_BITS5 = 5, //5位
|
|
|
EMD_BITS6, //6位
|
|
|
EMD_BITS7, //7位
|
|
|
EMD_BITS8, //8位
|
|
|
};
|
|
|
|
|
|
enum EMStopBits
|
|
|
{//停止位
|
|
|
EMS_ONE = 0, //1位
|
|
|
EMS_ONE5, //1.5位
|
|
|
EMS_TWO, //2位
|
|
|
};
|
|
|
|
|
|
struct ComParam
|
|
|
{//串口参数
|
|
|
uint comPort; //串口index 1、2、3...
|
|
|
uint baudRate; //波特率600、1200、...9600...115200
|
|
|
EMParity parity; //校验位
|
|
|
EMByteSize btSize; //数据位
|
|
|
EMStopBits stopBit; //停止位
|
|
|
uint readSize; //读缓冲区
|
|
|
uint writeSize; //写缓冲区
|
|
|
uint bOverlapped;//是否异步 1 是 0不是
|
|
|
};
|
|
|
|
|
|
enum IComState
|
|
|
{//串口状态
|
|
|
ICom_Closed = 0, //关闭
|
|
|
ICom_Error, //未设置参数或通讯失败
|
|
|
ICom_Normal, //正常
|
|
|
};
|
|
|
|
|
|
class icomport
|
|
|
{//串口类接口
|
|
|
public:
|
|
|
/****************************************************
|
|
|
*Function: 打开串口
|
|
|
*Intput: CommNum 串口ID
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
virtual int Open(int iport) = 0;
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭串口
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
virtual int Close() = 0;
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 重置错误或复位串口
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
virtual int Reset() = 0;
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置串口参数 -- Open以后调用
|
|
|
*Intput: pszparam 设置参数 -- "19200,n,8,1"
|
|
|
19200 波特率
|
|
|
无校验:n //偶校验:e //奇校验:o
|
|
|
8 数据位
|
|
|
1 停止位
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
*PS:调用此接口后才能通讯
|
|
|
******************************************************/
|
|
|
virtual int SetParam(const char* pszparam) = 0;
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置串口缓冲区参数 -- Open以后调用
|
|
|
*Intput: iread 输入缓冲区大小
|
|
|
iwrite 输出缓冲区大小
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
virtual int SetBuffer(int iread, int iwrite) = 0;
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取串口状态
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回串口状态
|
|
|
******************************************************/
|
|
|
virtual IComState GetStatus() = 0;
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 写入串口数据
|
|
|
*Intput: pszbuff 数据指针
|
|
|
len 数据长度
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回写入的数据长度 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
virtual int Write(const char* pszbuff, int len) = 0;
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 读取串口数据
|
|
|
*Intput: pszbuff 数据指针
|
|
|
nsize 期望读取的数据长度
|
|
|
timeout 超时时间 单位:ms
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回写入的数据长度 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
virtual int Read(char* pszbuff, int nsize, int timeout) = 0;
|
|
|
};
|
|
|
|
|
|
//导出接口
|
|
|
EXPORT_C int WINAPI icomport_open(icomport* p, int iport);
|
|
|
EXPORT_C int WINAPI icomport_close(icomport* p);
|
|
|
EXPORT_C int WINAPI icomport_reset(icomport* p);
|
|
|
EXPORT_C int WINAPI icomport_set_param(icomport* p, const char* pszparam);
|
|
|
EXPORT_C int WINAPI icomport_set_buffer(icomport* p, int iread, int iwrite);
|
|
|
EXPORT_C int WINAPI icomport_status(icomport* p);
|
|
|
EXPORT_C int WINAPI icomport_write(icomport* p, const char* pszbuff, int len);
|
|
|
EXPORT_C int WINAPI icomport_read(icomport* p, char* pszbuff, int nsize, int timeout);
|
|
|
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建com对象
|
|
|
*Intput: NULL
|
|
|
*Output: h com对象指针
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI CreateComPort(icomport** h);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放com对象
|
|
|
*Intput: NULL
|
|
|
*Output: h com对象指针
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI ReleaseComPort(icomport** h);
|
|
|
|
|
|
#endif //防止重复包含
|