没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
运行环境: WinCE5.0
我们有一个 GPS 模块连接在 COM3 上,现在有两个应用程序都需要读取 COM3 的内
容,然而 WinCE 的串口为独占式的串口,因此我们需要一个驱动程序,将 COM3 虚拟成
COM4 和 COM5 来供应用程序使用。下面我来介绍一下驱动程序的设计。
首先我们要解决虚拟串口驱动加载的问题
加载方法一:
在本程序中,加载过程需要两个函数来完成,一个是虚拟串口驱动的
COM_Init(),另一个是
RegisterDevice(),我们将在应用程序中使用 RegisterDevice()来启动
COM_Init()完成虚拟串口驱动的加载。在应用程序中加载虚拟串口驱动的代码如下:
DWORD VirComNO =4;
HANDLE hRes = RegisterDevice (L"COM", VirComNO,
L"GPSCOM.dll", (DWORD) VirComNO);
RegisterDevice 函数的用法参见文档说明。
通过这个函数我们就会调用 device.exe 在系统中添加了一个名为 COM4 的设备,
GPSCOM.dll 中的流接口 COM_Init()会被调用。
加载方法二:
当然我们也可以在系统启动时,让 device.exe 直接加载本驱动。
下面我们来看 COM_Init()的实现:
HANDLE
COM_Init(
ULONG Identifier
)
{
PHW_INDEP_INFO pSerialHead = NULL;
// Allocate our control structure.
//创建一个结构体用来记录设备信息
pSerialHead = (PHW_INDEP_INFO)LocalAlloc(LPTR,
sizeof(HW_INDEP_INFO));
pSerialHead->pAccessOwner = NULL;
......
//add com Identifier
//如果我们创建的是 COM5 这个设备,那么把 COM5 的相关信息记录在
pSerialHead 中。
if(5==Identifier)
{
RETAILMSG(DEBUG_COM2,(L" PLATFORM fwq
COM_init5 \r\n"));
pSerialHead->COMNUM = 5;
g_pCircleBuffer5 =CP_CreateCircleBuffer(8192);
}
//如果我们创建的是 COM4 这个设备,那么把 COM4 的相关信息记录在
pSerialHead 中。
if(4==Identifier)
{
RETAILMSG(DEBUG_COM2,(L" PLATFORM fwq
COM_init 4 \r\n"));
pSerialHead->COMNUM = 4;
// init circlebuffer for com4
g_pCircleBuffer4 =CP_CreateCircleBuffer(8192);
}
......
//返回 pSerialHead,这个 pSerialHead 将会被 COM_Open()所得到。
return(pSerialHead);
}
通过 RegisterDevice()和 COM_Init()的配合我们可以看到,每添加一个设备,
COM_Init()就会在 device.exe 的进程空间内分配一段空间用来存放相应设备的信息,
这些信息被记录在 pSerialHead 所指向的结构体中。
至此,设备的加载过程就完成,我们可以灵活的根据我们的需要在 pSerialHead
所指向的结构体中,添加需要的变量,这个结构体也可以我们自己来定义,但在本程序中,
我直接引用了系统代码中定义好的结构体,并在此结构体中添加了自己需要的变量。
第二,驱动程序加载成功之后,我们就可以通过应用程序来打开虚拟串口了。下
面我们来完成 COM_Open()函数。
HANDLE
COM_Open(
HANDLE pHead, // @parm Handle returned by
COM_Init.
DWORD AccessCode, // @parm access code.
DWORD ShareMode // @parm share mode - Not used in
this driver.
)
{
RETAILMSG(DEBUG_COM2,(L" PLATFORM fwq COM_Open \r\
n"));
// 系统会根据,CreateFile 的第一个参数,把 devcie.exe 内存空间中的与具
体设备相关的 //PHW_INDEP_INFO 结构体,通过 pHead 参数传递过来。
剩余11页未读,继续阅读
资源评论
- zwxu99992012-09-24还行,要是有完整源程序就更好了。
- jiezouxuanlv2013-02-26可以 就是没有完整的代码 没有参考 自己写的也不知道对不对
liubin23
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功