摘 要: 以基于Windows CE的平板电脑为硬件开发平台,采用VS2005集成开发环境开发了基于Windows CE操作系统的USB驱动和基于Windows CE系统的生理参数监护图形界面软件,并利用平板电脑常见的USB接口作为数据传输接口与生理参数采集模块进行数据通信,以对人体的主要生理参数进行实时监控。经试验显示,该监护系统基本达到了预期的要求。
关键词: 平板电脑; Windows CE; 生理参数; 家庭医疗监护系统
随着生活水平的日益提高,人们越来越关注自己和家人的健康情况。家庭医疗保健的兴起,使简单便携、功能强大的医疗设备进入了越来越多的家庭。而嵌入式智能终端(如平板电脑)的飞速发展已经将人们带入了一个后PC时代,将体积小、可靠性高、功耗低、应用灵活、功能强大的平板电脑等智能终端运用于家庭医疗监护设备已经成为一个瞩目的焦点[1]。
本系统利用平板电脑作为监护系统的主控系统,采用Windows CE操作系统。Windows CE作为一个开放的、可裁剪的、32 bit的实时嵌入式窗口操作系统,其多线程、多任务、多优先级专门针对资源有限的硬件平台而设计,具有可靠性好、实时性高、内核体积小等特点,被广泛应用于各个领域[2]。
1 基于平板电脑的医疗监护的系统结构
图1所示是基于平板电脑的家庭医疗监护系统的结构框图。将平板电脑作为主控系统利用USB接口的数据传输方式与生理参数采集模块进行数据通信,USB主控制器将采集的人体的心电、血氧、呼吸、体温、血压等主要生理参数通过内核中USB的驱动模块与操作系统交互,操作系统将其再传递给上层的监护系统的图形界面处理应用模块,外界可通过平板电脑的带触摸功能的显示屏实现与监护系统的人机交互,以达到实时监护效果。
2 监护系统的软件系统
基于平板电脑的家庭医疗监护系统的软件系统分为两个部分:一部分是基于该平板操作系统Windows CE下的USB驱动模块,另一部分是基于该系统的图形界面处理部分的应用。图形界面处理应用程序通过操作系统间接调用USB驱动模块与系统硬件平台交互,进而与外部生理参数采集模块进行数据传输交换,以实现实时医疗监护的功能。
2.1 基于Windows CE下的USB驱动的设计
Windows CE的USB驱动可以详细地分为三层:上层的USB设备驱动程序,被称为USB Client Driver,对应具有USB接口的外围设备;中间层的USBD,即USB总线驱动;下层的主机控制器驱动[3],即HCD。如图2所示。
HCD提供了抽象的主机控制器,为USBD提供了访问底层功能的服务;USBD位于HCD的上层,利用HCD提供的服务为USB Client Driver提供较高层次抽象的功能;USB设备驱动程序则使用USBD接口函数与外围设备进行数据通信。大部分USB外围设备由于功能性更适合流接口驱动的结构,所以一般都采用加载式流接口驱动程序模型来开发USB设备驱动程序[4]。
下面简要介绍开发该系统的USB驱动用到的几个重要函数[5]:
(1)USBDeviceAttach:设备加载时由系统调用,该函数用于初始化设备、取得USB设备信息和配置USB设备,并且申请必需的资源。
(2)USBInstallDrive:Windows CE系统在第一次加载USB设备驱动程序时首先被调用,创建需要的注册键,将USB驱动程序所需的注册表信息(如设备名称)写入到HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers目录下。
(3)USBUninstallDriver:在用户删除USB设备驱动程序时调用,主要负责删除注册键并释放其在USBDeviceAttach申请的相关资源。
(4)USB_Init:当驱动被Windows CE加载时将调用该函数。
(5)USB_Deinit:当驱动被Windows CE卸载时将调用该函数。
(6)USB_Read:应用程序调用ReadFile()函数时将调用此接口,本驱动在此接口中调用IssueInterruptTransfer以实现USB的中断读传输模式。
(7)USB_Write:应用程序调用WriteFile()函数时将调用此接口,本驱动同样在此接口中调用IssueInterruptTransfer以实现USB的中断写传输模式。
(8)USB_IOControl:应用程序调用DeviceIOControl()函数时将调用此函数,本USB驱动中将此接口调用IssueBulkTransfer以实现批量传输模式。
2.2 基于Windows CE系统的生理参数监护软件的设计
本系统采用VS2005集成开发环境,利用微软提供的基础类库MFC,以面向对象的程序设计和多线程的思想方法来完成生理参数监护上层应用软件的开发[6]。主要软件流程图如图3所示。
2.2.1 打开USB设备
当点击界面连接设备按钮时将调用hDriver=CreateFile(_T("USBn:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);打开USB设备,并获取该设备驱动句柄,此后便可利用该句柄对此设备进行操作,当不用该句柄时(即释放资源时)则调用CloseHandle( )关闭该句柄。然后调用WriteFile( )函数对设备进行上电操作,之后设备处于运行状态。
2.2.2 实现对外围设备的读写功能和分析绘图功能
在完成打开设备操作并运行正常后,就可以对设备进行数据传输操作,操作主要包括对外围设备的读、写、分析和绘图。利用Windows CE操作系统的多任务、多线程机制,将这些操作分配到不同的线程中[7],创建线程函数为: CWinThread*AfxBeginThread(AFX_THREADPROC pfnThreadProc,LPVOID pParam,int nPriority,UINT nStackSize, DWORD dwCreateFlags, LPSECURITY_ATTRIBUTES lpSecurityAttrs)。其中,pfnThreadProc是要创建线程的函数的指针,pParam是要传递给生成线程的参数,nPriority将设置生成线程的优先级,一般设置为普通优先级 THERAD_PRIORITY_NORMAL, nStackSize设置新线程堆栈大小,dwCreateFlags表示创建的线程创建时的状态,最后一个参数安全属性设置为NULL。在创建三个线程函数中将当前类的this指针传递给新线程,这样新线程可以获取当前类的部分成员变量,创建的进程都设置处于挂起状态,等到执行时才将其切换运行状态。
读接口数据线程将得到的数据暂存至缓冲buffer,该结构类型为typedef struct _frame_data_
{
UINT16 EcgW_I;
UINT16 EcgW_II;
UINT16 HeartRate;
…
} FRAME_DATA,*pFRAME_DATA;该结构体对应的外围采集设备的一帧数据,分析和绘图线程根据生理参数 采集设备的数据协议确认没有丢包的前提下,调用WriteFile()函数保存数据,并调用微软提供的MFC类库中的CDC、CPaintDC、CClientDC、CWindowDC、CPen、CBrush等类
设置图形画笔、画刷属性,利用这些属性并绘制图形。
3 实验结果
在实验室条件下进行测试,验证基于平板电脑的监护系统的可靠性、实时性、稳定性。如图4所示,运行监护界面软件,同时检测各个参数,均无出现丢包等数据传输问题,能实时地反应被监护者的血压、呼吸、血氧等人体主要参数及波形。实验表明该家庭医疗监护系统工作稳定,并能实现对人体六大参数的监护功能。
参考文献
[1] 何宗建.Windows CE嵌入式系统[M].北京:北京航空航 天大学出版社,2006.
[2] 汪兵. Windows CE嵌入式高级编程及实例详解[M]. 北京:中国水利水电出版社, 2008.
[3] 张东泉,谭南林,苏树强.Windows CE实用开发技术[M]. 北京:电子工业出版社,2009.
[4] Microsoft. Microsoft Windows CE.net help[S]. 2000.
[5] Windows CE device driver kit[M].Microsoft Press,1999.
[6] Liu Ning,Yang Zhenyu,Li Rong,et al. An optimization me thod for real-time natural phenomena simulation on Windows CE platform[C]. 31st Annual IEEE International Computer Software and Application Conference,2007,2:57-62.
[7] Jiang Min. A design of embedded terminal unit based on ARM and Windows CE [C]. Electronic Measurement and Instruments,2007.ICEMI International Conference,2007:336-340.