自己用api写的串口通信动态库
源代码在线查看: 应用说明.txt
================================================================================
Serial.dll应用说明
本动态库为通用型串口接口动态库,自带串口参数设置对话框和串口数据监视对话框。
可同时打开多个串口。
本动态库版权所有 夏明超(xiamingchao@tsinghua.org.cn) 2006~2010
================================================================================
================================================================================
使用过程如下:
使用实例索引和其对应配置对该实例进行初始化(具体含义见Initialize函数),然后使用实
例索引打开该实例(函数Open)。打开实例成功后,获得该实例的数据到达通知事件(函数
GetDRNHandle),当该实例对应的串口有数据时,产生这个事件,此时可以读取串口数据
(Read)。像串口写数据可以直接调用Write函数即可。退出前需关闭实例(Close)。
可以显示串口数据监视窗口(ShowMoniter)。
可以调用动态库内部函数(SetParam)进行参数设置。
修改历史
2006.07.16 当前版本为2.0.0.2
2006.07.18 当前版本为2.0.0.3
将Initialize函数的配置信息指针类型改为BYTE *,以增加通用性。
其结构按照SERIALCONFIG格式定义。
2006.07.29 当前版本为2.1.3.3
解决了写大量数据时写不出去的问题
================================================================================
================================================================================
输出函数如下:
函数名 所属版本
SetParam 2.0.0.2
Initialize 2.0.0.2
Open 2.0.0.2
Close 2.0.0.2
GetDRNHandle 2.0.0.2
Read 2.0.0.2
Write 2.0.0.2
GetStatus 2.0.0.2
GetDescriptionString 2.0.0.2
ShowMoniter 2.0.0.2
================================================================================
================================================================================
各函数返回码含义如下:
//Initialize返回码
#define INITIALIZE_SUCCESS 0X00 //初始化成功
#define INSTANCEINDEX_OVERFLOW 0XF1 //实例索引越限
#define INITIALIZE_ERROR 0XFF //初始化失败
//Open返回码
#define OPEN_SUCCESS 0X00 //打开设备成功
#define EVENT_ERROR 0X10 //创建事件出错
#define INVALID_PARAM 0XF0 //参数无效
#define THREAD_ERROR 0XFD //线程错误
#define SET_DEVICE_FAILURE 0XFE //设置设备失败
#define OPEN_DEVICE_FAILURE 0XFF //打开设备失败
//ReadParam返回码
#define READPARAM_SUCCESS 0X00 //读参数成功
#define READPARAM_ERROR 0XFF //读参数失败
#define READPARAM_ERROR_0 0XE0 //读参数0失败
#define READPARAM_ERROR_1 0XE1 //读参数1失败
#define READPARAM_ERROR_2 0XE2 //读参数2失败
#define READPARAM_ERROR_3 0XE3 //读参数3失败
#define READPARAM_ERROR_4 0XE4 //读参数4失败
#define READPARAM_ERROR_5 0XE5 //读参数5失败
#define READPARAM_ERROR_6 0XE6 //读参数6失败
#define READPARAM_ERROR_7 0XE7 //读参数7失败
#define READPARAM_ERROR_8 0XE8 //读参数8失败
#define READPARAM_ERROR_9 0XE9 //读参数9失败
#define READPARAM_ERROR_A 0XEA //读参数10失败
//GetStatus返回码
#define DEVICE_FINE 0X00 //设备正常
#define DEVICE_WAITREAD 0X11 //设备有数据等待接收
#define DEVICE_WRONG 0XFF //设备错误
================================================================================
================================================================================
各函数用途及定义
/////////////////////////////////////////////////////////
// 函数名: SetParam /
// [dll输出函数]设置设备参数 /
// 功能: /
// 提供给外部调用,调用dll本身的参数设置 /
// 输入参数: /
// InstanceIndex: 要设置的实例号 /
// 输出参数: /
// 无 /
// 返回值: /
// 无 /
/////////////////////////////////////////////////////////
extern "C" void SetParam( DWORD InstanceIndex )
/////////////////////////////////////////////////////////
// 函数名: Initialize /
// [dll输出函数]初始化设备(本Dll中为串口) /
// 功能: /
// 初始化串行口所用内存及参数 /
// 输入参数: /
// InstanceIndex:要初始化的实例索引 /
// pConfigInfo:串口设备配置信息指针 /
// 如果这个参数是空,则dll从自己的 /
// 配置中读取 /
// 输出参数: /
// 无 /
// 返回值: /
// 初始化结果码 /
/////////////////////////////////////////////////////////
extern "C" BYTE Initialize( DWORD InstanceIndex, BYTE * pConfigInfo )
pConfigInfo是串口配置信息指针,其格式按照SERIALCONFIG数据结构定义如下:
typedef struct rawSERIALCONFIG
{
DWORD PortNum; //端口号
DWORD ReceBufSize; //接收缓冲区长度
DWORD SendBufSize; //发送缓冲区长度
DCB ConfigDCB; //DCB
} SERIALCONFIG;
/////////////////////////////////////////////////////////
// 函数名: Open /
// [dll输出函数]打开设备 /
// 功能: /
// 打开串口 /
// 输入参数: /
// InstanceIndex:要打开设备的实例索引 /
// 输出参数: /
// 无 /
// 返回值: /
// 打开设备结果码 /
/////////////////////////////////////////////////////////
extern "C" BYTE Open( DWORD InstanceIndex )
/////////////////////////////////////////////////////////
// 函数名: Close /
// [dll输出函数]关闭设备 /
// 功能: /
// 关闭串口 /
// 输入参数: /
// InstanceIndex: 要关闭设备的实例索引 /
// 输出参数: /
// 无 /
// 返回值: /
// 打开设备结果码 /
/////////////////////////////////////////////////////////
extern "C" void Close( DWORD InstanceIndex )
/////////////////////////////////////////////////////////
// 函数名: GetDRNHandle /
// [dll输出函数]获得通信数据到达事件指针 /
// 功能: /
// 获得通信数据到达事件指针 /
// 输入参数: /
// InstanceIndex:要获得事件指针的实例索引/
// 输出参数: /
// 无 /
// 返回值: /
// 事件指针 /
/////////////////////////////////////////////////////////
extern "C" HANDLE GetDRNHandle( DWORD InstanceIndex )
/////////////////////////////////////////////////////////
// 函数名: Read /
// [dll输出函数]读取数据 /
// 功能: /
// 从相应的实例里读取数据 /
// 输入参数: /
// InstanceIndex:要读取数据的实例索引 /
// lpBuffer:存放读取数据的缓冲区地址 /
// nNumberOfBytesToRead: /
// 存放读取数据缓冲区的最大长度 /
// 输出参数: /
// lpNumberOfBytesRead: /
// 实际读取字节数 /
// 返回值: /
// 成功:TRUE /
/////////////////////////////////////////////////////////
extern "C" BOOL Read( DWORD InstanceIndex,
BYTE * lpBuffer,
DWORD nNumberOfBytesToRead,
DWORD * lpNumberOfBytesRead )
/////////////////////////////////////////////////////////
// 函数名: Write /
// [dll输出函数]写数据 /
// 功能: /
// 从相应的实例里写数据 /
// 输入参数: /
// InstanceIndex:要读取数据的实例索引 /
// lpBuffer:存放发送数据的缓冲区地址 /
// nNumberOfBytesToWrite: /
// 要发送的数据字节数 /
// 输出参数: /
// lpNumberOfBytesWritten /
// 实际发送字节数 /
// 返回值: /
// TRUE:发送成功 /
// FALSE:发送失败 /
/////////////////////////////////////////////////////////
extern "C" BOOL Write( DWORD InstanceIndex,
BYTE * lpBuffer,
DWORD nNumberOfBytesToWrite,
DWORD * lpNumberOfBytesWritten )
/////////////////////////////////////////////////////////
// 函数名: GetStatus /
// [dll输出函数]获得实例通信状态 /
// 功能: /
// 获得实例通信状态 /
// 输入参数: /
// InstanceIndex:实例号 /
// 输出参数: /
// 无 /
// 返回值: /
// 状态码 /
/////////////////////////////////////////////////////////
extern "C" BYTE GetStatus( DWORD InstanceIndex )
/////////////////////////////////////////////////////////
// 函数名: GetDescriptionString /
// [dll输出函数]dll描述文本 /
// 功能: /
// 获得dll的描述文本 /
// 输入参数: /
// DescripStrBuf:描述文本缓冲区地址 /
// BufLen:描述文本缓冲区长度 /
// 输出参数: /
// DescripStr:描述文本缓冲区 /
// 返回值: /
// TRUE: 成功 /
// FALSE: 失败 /
// 描述文本长度超过输出缓冲区长度/
/////////////////////////////////////////////////////////
extern "C" BOOL GetDescriptionString( char * DescripStrBuf, DWORD BufLen)
/////////////////////////////////////////////////////////
// 函数名: ShowMoniter /
// [dll输出函数]监视串口通信数据 /
// 功能: /
// 显示或隐藏监视窗口 /
// 输入参数: /
// bShow:是否显示监视窗口 /
// 输出参数: /
// 无 /
// 返回值: /
// 无 /
/////////////////////////////////////////////////////////
extern "C" void ShowMoniter( BOOL bShow )