基于WDF 的心电模块驱动程序设计与实现

2020-09-23 02:52李健铎孟宪华
科学技术创新 2020年28期
关键词:堆栈驱动程序心电

李健铎 孟宪华

(东软医疗系统股份有限公司,辽宁 沈阳110034)

1 心电模块系统设计

在医疗诊断过程中,人体的心电(ECG)在诊断高血压性心脏病上的临床意义和应用价值。本设计心电模块Physio 系统如图1 主要包括连接电脑端的ECG 组合电缆,处理ECG 信号的逻辑电路,Cypress 型号CY7C64713(FX1)芯片以及Physio 探头接口插件。

图1 心电模块系统

2 WDF 框架模型

WDF(Windows Driver Foundation)是微软继WDM(Windows Driver Model)之后提出的全新的驱动程序模型,目前在主流Windows7/8/10 操作系统中应用广泛,相比WDM框架,WDF 框架拥有高度灵活,可扩展,实现了公共驱动程序功能(如电源管理、PNP 支持)。

本文驱动设计主要以Windows10 操作系统1803 版为基础,USB 驱动主要使用的驱动程序堆栈是USB 3.0 stack,与USB 2.0 差别在于USB 协议层加载的基础驱动程序堆栈不同,见表1,这导致了WDF 编写风格的不同。

表1 驱动程序堆栈

3 驱动程序设计

WDF 提供了两个框架,内核模式驱动程序框架(KMDF)和用户模式驱动程序框架(UMDF),本文设计使用的是KMDF 驱动程序架构。

3.1 基本驱动框架

无论是内核模式还是用户模式的驱动程序,都采用同一套对象模型构建,采用了同一个基础承载,如表2 所示,通过调用WdfDriverCreate 函数创建一个驱动对象,贯穿整体驱动框架。在WDF 框架中,设备对象是驱动对象的核心成员,调用EvtDriverDeviceAdd 函数来创建所需的设备对象。与WDM不同的是,EvtDriverDeviceAdd 函数不仅完成创建设备对象,还会创建电源管理模块、IO 队列、设备驱动接口GUID 等一系列功能。

表2 基础框架接口

3.2 URB 处理流程

KMDF 驱动不能直接与Physio 心电模块通信,所以驱动需要创建请求并将其提交到USB 驱动程序堆栈进行处理,而每个请求中包含了一个URB 请求块(USB request block),KMDF 驱动程序通过URBs 执行所有设备特定的操作,包括数据传输。在将URB 提交到USB 驱动程序堆栈之前,KMDF 驱动程序必须用该请求的相关信息对其进行初始化。在Windows10 操作系统下,URBs 初始化方式也有明确的要求。主要分为四个步骤:URB请求包创建、URB 初始化、URB 信息填充、URB 发送。

表3 URB 基本操作函数

3.3 IO 读写函数

IO 读写函数不同于WDF 的BULK Write/Read 函数,为了与超声系统兼容,读写函数在PhysioEvtIoDeviceControl()函数中执行,以读功能为例,通过FindUsbPipeType()函数获取上下文句柄UsbPipeHandle,调用WdfUsbTargetPipeIsInEndpoint()函数获取当 前 管 道 是 IN 还 是 OUT ( 读 取 为 IN), 利 用WdfUsbTargetPipeFormatRequestForRead()函数,当数据被读取后执行后回调函数EvtRequestReadCompletionRoutine(),至此,来自心电模块的采集数据就传递到系统软件中。

3.4 重枚举过程

根据Cypress 芯片CY7C64713 设计要求,在设备加载驱动过程中需要下载两次bix 固件,分别是引导文件physioFX1.bix和功能文件physio.bix。图2 所示的是正确的加载引导及功能文件后,设备正常枚举的情况。

图2 设备枚举成功

4 测试结果

结合超声系统环境,在成人心脏的预设下如图3 所示,利用心电模拟器进行波形仿真:

图3 心电模块模拟仿真图

5 结论

本文主要介绍了Windows10 操作系统下的心电模块的驱动开发,并在超声系统中模拟波形验证,同时围绕心电模块进行了相关通道控制测试,确保了设备的安全性及可靠性。

猜你喜欢
堆栈驱动程序心电
基于行为监测的嵌入式操作系统堆栈溢出测试*
心电向量图诊断高血压病左心室异常的临床应用
心电医联体建设需求分析及意义
基于非接触式电极的心电监测系统
阻止Windows Update更新驱动程序
卡片式智能心电采集仪
计算机硬件设备驱动程序分析
基于堆栈自编码降维的武器装备体系效能预测
一种航天器软件进程堆栈使用深度的动态检测方法
妙用鼠标驱动