驱动程序---音频 MDD 和 PDD

2024-02-07 17:18
文章标签 音频 驱动程序 mdd pdd

本文主要是介绍驱动程序---音频 MDD 和 PDD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大多数 Windows CE 设备驱动程序都由一个平台相关驱动程序 (PDD) 和一个模型设备驱动程序 (MDD) 组成。整体式驱动程序 将所有 PDD 和 MDD 组合到一个驱动程序中。分层驱动程序 没有组合它们。

MDD 具有下列特征:

包含给定类型的所有驱动程序所共有的代码。

调用 PDD 函数以访问硬件。

链接到 PDD 层,并且定义MDD 期望在该层中调用的设备驱动程序服务提供程序接口 (DDSI) 函数。

向操作系统 (OS) 公开设备驱动程序接口 (DDI) 函数。

OS 的其他部分可以调用这些函数。相关设备可以共享相同的 DDI。整体式驱动程序还公开 DDI 函数。

处理中断处理。

可供开发人员重用。

可以链接到多个 PDD。

通常不需要进行更改。

如果进行了更改,则在将驱动程序迁移到将来的版本时可能会遇到麻烦。

包含任何中断服务线程 (IST)。

PDD 具有下列特征:

由硬件平台特有的代码组成。

可能需要修改硬件平台。

专门用于使用特定的 MDD 实现。

公开 MDD 调用的 DDSI 函数。

整体式驱动程序不公开 DDSI 函数。

以下列表显示了在实现分层驱动程序和整体式驱动程序之间进行取舍时的注意事项:

分层驱动程序可能只需要修改 PDD。

分层驱动程序增加了设备驱动程序中的函数调用的系统开销,因为 MDD 调用到 PDD 中。

整体式驱动程序改进了驱动程序性能,因为它将 MDD 和 PDD 到组合一个层之中,这消除了 MDD 对 PDD 进行的函数调用。

整体式驱动程序更难以迁移到将来版本的 Windows CE,因为 Windows CE 所包含的大多数设备驱动程序都被划分为一个 PDD 和一个 MDD。

如果设备的功能与 MDD 层中的函数执行的任务很好地匹配,则整体式驱动程序可以更简单、更有效。

不管是实现分层驱动程序还是实现整体式驱动程序,都可以将任何示例驱动程序的源代码作为实现的基础。

另请参阅

Windows CE Drivers | Driver Development Tools | Driver Debugging | How to Use the CETK to Test a Driver | Drivers: Post-Development Tasks






作为直接使用统一音频模型 (UAM) 或实现流式接口的替代方法,可以使用 Microsoft 提供的模型设备驱动程序 (MDD) 库。该库通过音频设备驱动程序服务提供程序接口 (DDSI) 函数实现了流式接口函数。

如果您使用 Wavemdd.lib,则必须创建匹配的、实现了这些音频 DDSI 函数的平台相关驱动程序 (PDD) 库。PDD 库通常被称为 Wavepdd.lib(尽管不要求这样)。然后,可以将这两个库链接起来,以构成音频驱动程序(通常称为 Wavedev.dll)。

一般情况下,音频硬件支持比通常适用于文件的操作集更大的操作集。例如,文件不具有音量控制和播放速度控制,但音频硬件通常具有这些控制。

流式接口的 DeviceIOControl 部分允许对文件进行任意操作,从而使得可以使用 WAV_IOControl 函数来操纵音频硬件。为了向音频硬件发送命令,OS 向 WAV_IOControl 传递了各种消息。例如,为了让音频硬件做好录制准备,中间件使用 WAV_IOControl 向音频驱动程序发送 WIDM_PREPARE 消息。

发送到音频驱动程序的消息类似于基于 Windows 的桌面 OS 上的用户模式音频驱动程序(如 Mmdrv.dll)所使用的那些消息。

因为音频驱动程序完全依赖于 DeviceIOControl 函数消息,所以流式接口的其余部分的实现相对简单。特别地,WAV_ReadWAV_SeekWAV_Write 函数仅仅是返回常数值的存根。

其他流式接口函数应该完全实现,并且遵循在这些函数的 Microsoft Windows CE API Reference 中描述的约定。

下图显示了使用 MDD 库的音频驱动程序的交互。

wavearch

 

如图所示,播放和录制声音的第一步是创建一个从应用程序到 OS 的调用。OS 将此类调用转换为对音频驱动程序的 WAV_IOControl 调用。执行这一转换的 OS 技术为 Wave API Manager。然后,音频驱动程序对硬件执行适当的操作。

设备管理器只加载和注册音频驱动程序;它并不直接参与该驱动程序的操作。

像标准流式接口驱动程序一样,音频驱动程序使用注册表项来存储配置信息以及将其本身公布给 OS。

如果该音频驱动程序尚未列在 Platform.reg 中,请创建一个 HKEY_LOCAL_MACHINE/Drivers/Builtin/Audio 注册表项来存储配置信息。

当该音频驱动程序在启动时加载时,设备管理器会为该驱动程序创建一个 HKEY_LOCAL_MACHINE/Drivers/Active 注册表项。因为设备管理器只在启动时检查音频驱动程序,所以附加音频硬件的驱动程序仍然需要在注册表的 /Builtin/Audio 部分中具有它们的注册表条目,尽管它们的硬件未内置到基于 Windows CE 的运行时映像中。

有关基于 PCI 的驱动程序的驱动程序加载模型的信息,请参阅 PCI Bus Driver Loading Process

以下列表显示了音频驱动程序的流式接口函数:

WAV_Close

WAV_Deinit

WAV_Init

WAV_IOControl

WAV_Open

WAV_PowerDown

WAV_PowerUp

WAV_Read

WAV_Seek

WAV_Write

有关这些函数的详细信息,请参阅 Waveform Audio Driver Functions。有关流式接口驱动程序的详细信息,请参阅 Stream Interface Driver Development Concepts

以下列表显示了音频驱动程序的 DDSI 函数:

PDD_AudioDeinitialize

PDD_AudioGetInterruptType

PDD_AudioInitialize

PDD_AudioMessage

PDD_AudioPowerHandler

PDD_WaveProc

有关这些函数的详细信息,请参阅 Audio PDD Functions

另请参阅

Audio Driver Development Concepts | Stream Interface Driver Development Concepts

Tag标签: 音频

这篇关于驱动程序---音频 MDD 和 PDD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688398

相关文章

C#通过ACE OLEDB驱动程序访问 Access和 Excel

ACE 代表 Access Connectivity Engine。它是 Microsoft 提供的一组组件,用于访问和操作 Microsoft Access 数据库以及其他类似的文件格式,如 Excel 工作簿。ACE 主要包括以下几部分: ACE OLEDB 驱动程序:用于通过 OLE DB 提供程序访问 Access 数据库和 Excel 文件。例如,Microsoft.ACE.OLED

生日贺卡录放音芯片,多段音频录音ic生产厂商,NVF04M-32minute

可以录音播放的生日贺卡与传统的纸质贺卡相比,它有着创意以及个性的特点,仅需少量的电子元器件,即可实现录音功能,搭配上文字,让声音存储在生日贺卡里,让贺卡也变得有温度,祝福我想亲口对TA说。 生日贺卡录放音芯片方案——NVF04M 采用外挂SPI存储器的方式,达到录音的功能。它的主要特点是声音清晰,录音时间长。目前可以提供的录音时间为32分钟。NV04FM的一个显著特点是存储时间灵活,客

Pr:首选项 - 音频硬件

Pr菜单:编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“音频硬件” Audio Hardware选项卡可以指定计算机的音频设备和设置,还可以指定 Pr 用于音频回放和录制的 ASIO 和 MME 设置(仅限 Windows)或 CoreAudio 设置(仅限 macOS)。 当连接音频硬件设备时,该类型设备的硬件设置(如默认输入、默认输出、主时钟、延迟和

Pr:首选项 - 音频

Pr菜单:编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“音频” Audio选项卡主要作用是控制音频的处理设置,包括音量调整、波形生成、音频渲染等选项,这些设置有助于优化音频的处理和编辑工作,适用于不同的剪辑需求和项目要求。 自动匹配时间 Automatch Time 指定已调整的任何控件返回到其先前设置的时间(在调音台中),以秒 Seconds为单位。

【Python百日进阶-Web开发-音频】Day705 - 音频加载 librosa.load / librosa.stream

文章目录 一、音频加载1.1 librosa.load1.1.1 语法与参数1.1.2 例子1.1.2.1 下载并加载文件1.1.2.2 加载并重采样1.1.2.3 加载文件,从第15秒开始,加载5秒- 1.2 librosa.stream1.2.1 语法与参数1.2.2 例子1.2.2.1 一次对 256 帧的块应用短期傅里叶变换。1.2.2.2 使用较短的帧和不重叠的窗口计算流上的 m

Android AudioManager 音频管理

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.

libmad音频解码库-Linux交叉编译移植

下载并解压libmad-0.15.1b.tar.gz 下载链接:https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz $tar -xvf libmad-0.15.1b.tar.gz$cd libmad-0.15.1b 1、先执行下面的命令:这条命令是为了适配高版本的gcc,因为高版本的gcc已经将-fforce-mem去除了:

Linux speex音频库-音频数据编解码

speex音频数据编解码 speex简述speex encoder(编码器)speex decoder(解码器)denoise vad (降噪,语音活性检测) speex简述 speex官网 Speex: A Free Codec For Free Speech Overview Speex is an Open Source/Free Software patent-fre

随手记(2)-java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

问题描述: 在使用Java连接access数据的.mdb文件时候程序报如下错误 java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序     错误原因: 在win7 office2013下报错 解决方法:  查看Java桥连程序连接字符串是否写成{Microsoft Access Driver (*.m

【Python百日进阶-Web开发-音频】Day708 - 时域处理 librosa.lpc

文章目录 一、时域处理1.1 librosa.lpc1.1.1 语法与参数1.1.2 示例1.1.2.1 在整个系列上以 16 阶计算 y 的 LP 系数1.1.2.2 计算 LP 系数,并绘制原始序列的 LP 估计值 一、时域处理 1.1 librosa.lpc https://librosa.org/doc/latest/generated/librosa.lpc.h