`
buliedian
  • 浏览: 1237562 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

WinCE 5.0边做边学(8)

阅读更多

在上次的边做边学中,我们了解到了内置的设备驱动程序的架构,因为各种不同类别的内置驱动程序要实现不同的接口,因此在实现起来就非常有针对性,也不利于演示。这次我们继续了解另一种驱动程序——流接口驱动程序的特点及其实现方法。
流接口驱动程序是在应用程序层采用标准的文件操作APIS来调用设备的,最常见的就是串口,我们可以使用CreateFile()函数来打开一个串口,然后通过ReadFile(),WriteFile()函数来读写串口,很显然,串口就是一种流接口的驱动程序。这类驱动程序的特点就是有着统一的接口函数,设备端一般都较简单,以数据提供者为主。
标准的流接口是如下的一组函数,我们先来看一下这组函数的基本外观:
1、HANDLE XXX_Init(LPCTSTR pContext,LPCVOID lpvBusContext);
这个函数是在设备管理程序通过ActiveDeviceEx()函数激活设备时被系统调用的。它的主要功能是初始化驱动程序中用到的资源,对I/O地址空间和内存进行映射等。
2、BOOL XXX_Deinit(DWORD hDeviceContext);
这个函数是在设备管理程序通过DeactivateDevice()函数卸载设备时被系统调用的,它的主要功能是回收驱动程序中用到的资源。
3、DWORD XXX_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode);
这个函数是在应用程序通过CreateFile()函数打开设备时调用的。
4、BOOL XXX_Close(DWORD hOpenContext);
这个函数是在应用程序通过CloseHandle()函数关闭句柄时调用的。
5、DWORD XXX_Read(DWORD hOpenContext,LPVOID pBuffer,DWORD Count);
这个函数是在应用程序通过ReadFile()函数读取设备时调用的。
6、DWORD XXX_Write(DWORD hOpenContext,LPCVOID pBuffer,DWORD Count);
这个函数是在应用程序通过WriteFile()函数向设备写入数据时调用的。
7、DWORD XXX_IOControl(DWORD hOpenContext,DWORD dwCode,PBYTE pBufIn,DWORD dwLenIn,PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut);
这个函数是在应用程序通过DeviceIOControl()函数向设备发送控制字时调用的。
8、void XXX_PowerUp(DWORD hDeviceContext);
这个函数是在向设备恢复供电的时候调用的。
9、void XXX_PowerDown(DWORD hDeviceContext);
这个函数是在设备断电的时候调用的。

上述函数中的XXX部分是在注册表中注册此设备驱动程序的时候Perfix注册表项的值。例如串口,则用Com,并口则用LTP等等。只要一个DLL中针对特定设备实现了上述接口并且正确在注册表中注册,那么就可以在程序中通过那些文件API函数来访问此设备。下面我们就一起在PB5中按上述接口模拟一个设备。设备的名字就叫做TTT吧。
运行PB5,打开上次做的平台,在文件菜单中执行"New Project or File"命令,新建一个"WCE Dynamic-Link Library"项目,输入项目名字为"Test"。在向导的第一步中输入必要的信息(此处不输也可以,这些信息可供向导自动生成一个README.TXT文件,不过还是写上好,以免以后忘了),在下一步中选择一个空项目,完成。
在新的源程序文件中输入以下程序:
// test.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "memory.h"
#include "windows.h"

HANDLE* hDevice;
#define BUFSIZE 256
WCHAR buffer[BUFSIZE];

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

HANDLE TTT_Init(LPCTSTR pContext,LPCVOID lpvBusContext)
{
hDevice=(HANDLE*)LocalAlloc(LPTR,sizeof(HANDLE));
memset(buffer,0,sizeof(WCHAR)*BUFSIZE);
return hDevice;
}

BOOL TTT_Deinit(DWORD hDeviceContext)
{
LocalFree(hDevice);
return TRUE;
}

DWORD TTT_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)
{
if (!hDeviceContext)
return FALSE;
return TRUE;
}

BOOL TTT_Close(DWORD hOpenContext)
{
if (!hOpenContext)
return FALSE;
return TRUE;
}

DWORD TTT_Read(DWORD hOpenContext,LPVOID pBuffer,DWORD Count)
{
DWORD dwret=min(BUFSIZE,Count);
wcsncpy((LPWSTR)pBuffer,buffer,dwret);
return dwret;
};

DWORD TTT_Write(DWORD hOpenContext,LPCVOID pBuffer,DWORD Count)
{
DWORD dwret=min(BUFSIZE,Count);
wcsncpy(buffer,(LPWSTR)pBuffer,dwret);
return dwret;
}

DWORD TTT_IOControl(DWORD hOpenContext,DWORD dwCode,PBYTE pBufIn,
DWORD dwLenIn,PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut)
{
return TRUE;
}

void TTT_PowerUp(DWORD hDeviceContext)
{
return;
}

void TTT_PowerDown(DWORD hDeviceContext)
{
return;
}


编译,然后编译该test文件夹下的test.def文件,将这些实现的接口函数导出:
LIBRARY TEST.DLL

EXPORTS

TTT_Init
TTT_Deinit
TTT_Open
TTT_Close
TTT_PowerUp
TTT_PowerDown
TTT_IOControl
TTT_Read
TTT_Write


同时编辑此文件夹下的test.reg文件,加入必要的注册表项:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\test]
"DeviceArrayIndex"=dword:0
"Prefix"="TTT"
"Dll"="test.Dll"
"Order"=dword:20

好了,一个TTT设备的流接口驱动就写好了,从中可以看到,在写驱动的时候比PB4要更加清晰,在源程序文件夹中的DEF文件,REG文件,BIB文件,DB文件,DAT文件和编译链接时需要的BAT文件都被PB生成好了,开发人员只要作些必要的修改即可以,非常方便。
接下来,为了测试我们的驱动程序是否可以正常工作,还需要写一个测试程序,再次为平台新建一个WCE应用程序项目TestTTT,写入如下代码并编译为EXE文件:
#include "stdafx.h"
#include "windows.h"

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.

HANDLE handle=CreateFile(_T("TTT1:"),GENERIC_READ|GENERIC_WRITE,0,
NULL,OPEN_EXISTING,0,NULL);
ASSERT(handle);
DWORD ret=0;
TCHAR* pstr=_T("This is a TEST of TTT Driver");
WriteFile(handle,pstr,(_tcslen(pstr)+1)*sizeof(TCHAR),&ret,NULL);
TCHAR ReadStr[256];
memset(ReadStr,0,sizeof(TCHAR)*256);
ret=0;
ReadFile(handle,ReadStr,sizeof(ReadStr),&ret,NULL);
MessageBox(NULL,ReadStr,_T("Test"),MB_OK);
CloseHandle(handle);
return 0;
}


好了,一切准备就绪,重新编译平台并下载到设备上运行,在Windows文件夹(修改文件夹选项,把所有的复选框全去掉才能看到隐藏的和系统文件)下可以找到test.dll文件和TestTTT.exe文件,运行后者,结果如图:




很简单吧,你只要在上述的接口中访问你的设备端口读写数据就可以了,我只是举个例子,希望能对你有所启发,对于驱动程序部分的内容,就先告一段落吧,继续关注后续文章吧!

分享到:
评论

相关推荐

    WinCE 5.0边做边学

    《WinCE 5.0边做边学》是一本深入浅出地介绍Windows CE 5.0操作系统开发和应用的教程。Windows CE是微软推出的一个嵌入式操作系统平台,广泛应用于掌上设备、工业控制、车载系统等领域。本书旨在帮助读者通过实践...

    WINCE5.0应用程序

    在Windows CE 5.0(简称WINCE5.0)平台上进行应用程序开发,开发者通常会利用Visual Studio 2005(VS2005)作为集成开发环境(IDE)。这个平台提供了丰富的工具和资源,使得开发者能够创建高效、可移植的嵌入式应用...

    WinCE5.0中文模拟器SDK

    **WinCE5.0中文模拟器SDK详解** WinCE5.0中文模拟器SDK是针对Windows Embedded Compact 5.0(原名Windows CE)开发的一个重要工具,它为开发者提供了一个在桌面环境下模拟Windows CE设备运行环境的平台。这个模拟器...

    WinCE 5.0 软件合集(内置25个程序)

    内置25个WinCE5.0程序,包括系统工具,媒体播放、游戏、计算器等 这些的程序都是由通过网络收集的 程序能都在WinCE5.0上完美运行(分别在WinCE5.0模拟器和装有WinCE5.0的导航仪上成功运行)

    WinCE5.0模拟器.rar_win ce_win ce 5.0 模拟器_电脑模拟_电脑车操作_车机

    《WinCE5.0模拟器:打造车机操作体验的电脑仿真平台》 Windows CE(简称WinCE)是微软公司开发的一种嵌入式操作系统,它主要用于小型设备,如掌上电脑、车载信息娱乐系统等。在本文中,我们将深入探讨WinCE5.0...

    WinCE5.0中文模拟器SDK(VS2005) Part2

    目前权限只能上传45MB大小的文件,只能分包压缩上传了,需要用的请将两个压缩包都下载下来再解压缩。

    WinCE5.0模拟器(win7)

    WinCE5.0模拟器是针对Windows CE 5.0操作系统设计的一款软件工具,它允许开发者在Windows 7系统上模拟运行WinCE5.0环境,以便进行应用程序开发、测试和调试。Windows CE是一个嵌入式操作系统,广泛应用于各种设备,...

    wince5.0下的一些小游戏

    在Windows CE 5.0(简称WinCE5.0)操作系统上,有一系列小游戏可供用户娱乐。Windows CE是微软开发的一个嵌入式操作系统,广泛应用于各种设备,包括车载信息系统、手持设备等。在这个环境下,由于硬件限制和系统特性...

    WinCE5.0模拟器(中文).rar

    WinCE5.0模拟器是基于Windows Embedded Compact 5.0操作系统的一个开发和测试工具,它允许开发者在桌面PC上模拟Windows CE系统的行为,以便在实际硬件设备部署之前进行应用程序的开发、调试和测试。这个“WinCE5.0...

    嵌入式系统/ARM技术中的WinCE 5.0边练边学(5)(6)

    工欲善其事,必先利其器    对于实时系统,如何调试是一个很难解决的问题,包括对系统内核的调试,对驱动程序的调试,对应用程序的调试等。对于应用程序,通常各集成开发环境都提供了常规的单步跟踪等调试手段。...

    WinCE5.0中文模拟器VS2008

    《深入理解WinCE5.0中文模拟器与VS2008开发环境》 Windows CE 5.0,作为微软推出的嵌入式操作系统,广泛应用于各种小型设备和嵌入式系统中。为了方便开发者在Windows平台上进行WinCE应用的调试和测试,微软提供了...

    wince5.0环境下播放器

    在Windows CE 5.0(简称WinCE5.0)环境下,开发和运行多媒体播放器是一项重要的任务。这个操作系统主要用于嵌入式设备,如手持设备、车载系统等,因此一个功能完善的播放器对于提升用户体验至关重要。标题提到的...

    wince5.0.rar_OK2440 bsp_ok2440_wince5_wince5.0 _wince5.0 bsp

    本资源包“wince5.0.rar_OK2440 bsp_ok2440_wince5_wince5.0 _wince5.0 bsp”是针对OK2440开发板的WinCE5.0 BSP(Board Support Package)更新版,旨在为开发者提供更加稳定和高效的平台支持。 首先,让我们深入...

    WinCE5.0manual.rar_wince5_wince5.0

    本资料主要针对WinCE5.0的操作系统特性、开发环境以及应用编程进行详细介绍,旨在帮助开发者深入理解和应用这一平台。 一、WinCE5.0概述 Windows CE 5.0是微软的实时操作系统(RTOS)系列之一,具有轻量级、可裁剪...

    WINCE5.0 的应用开发环境

    ### WINCE 5.0 应用开发环境的搭建与配置 #### 1. 引言 Windows CE 5.0(简称WINCE 5.0)是微软针对嵌入式设备推出的操作系统之一,其提供了强大的开发工具和丰富的API接口,支持多种处理器架构。为了在开发环境中...

    WinCE5.0笔记本工具、软件及游戏

    WinCE5.0,全称为Windows Embedded Compact 5.0,是微软开发的一款嵌入式操作系统,主要用于掌上设备、工业设备以及车载信息娱乐系统等。这个标题提及的"WinCE5.0笔记本工具、软件及游戏"显然是针对运行WinCE5.0系统...

    wince 5.0 setup PB5.0开发环境的应用

    Windows CE 5.0(简称WinCE 5.0)是一种嵌入式操作系统,由Microsoft公司开发,广泛应用于各种智能设备和嵌入式系统中。它提供了基础的系统内核、设备驱动支持以及应用程序框架,使得开发者能够创建定制化的、高性能...

    eboot.rar_2410 wince 5.0_eboot S3C24_wince 5.0 ebo_wince5.0 _wi

    标题中的“eboot.rar_2410 wince 5.0_eboot S3C24_wince 5.0 ebo_wince5.0 _wi”提到了几个关键概念,分别是“eboot”,“S3C2410”,“Windows CE 5.0”(wince5.0)。这表明我们正在讨论基于ARM9处理器S3C2410的...

    wince5.0.rar_wince5.0

    这个压缩包文件“wince5.0.rar_wince5.0”显然包含了关于WinCE 5.0驱动开发的相关资料,特别是驱动开发流程的介绍,对于想要学习或已经在从事WinCE 5.0驱动程序开发的工程师来说非常有价值。 驱动程序是操作系统与...

    WinCE5.0打印机驱动

    本文将详细解析与"WinCE5.0打印机驱动"相关的知识点,帮助用户理解如何在Windows CE平台上构建和使用打印机驱动程序。 首先,让我们了解什么是DDK(Driver Development Kit)。DDK是微软提供的一套工具和文档,用于...

Global site tag (gtag.js) - Google Analytics