WINCE声音驱动模型概述(1)

1.1 WINCE的声音模型

 

   标准的WINDOWS CE下的声音处理模型。

1)  声音应用在使用WAVE接口函数的时候被COREDLL模块分了类:如果是简单的PCM数据,则直接进入ADM模块,进行SoftWare Mixer或者连Mixer也省了,直接调用Driver放音;如果是压缩模式的数据则进入ACM模块进行解压处理后(比如:GSM/G7XX等等…)再次进入ADM模块。 此外,如果DRIVER支持硬件的Mixer,则应用层直接Bypass掉ACM和ADM,直接进入到驱动进行软件或者硬件进行混音和放音。

 

2)  ACM、Software Mixer都是可选配单元,可以通过注册表或者CE内核配置参数添加或者删除。

 

 

1.2 WINCE的声音驱动模型
l         分层模型

 

 

 这是一个标准的分层 MDD-PDD 流式接口模型。 应用层的WAVEAPI都使用WaveAPI Manager(WaveApi.DLL)通过DeviceIOControl映射成为WAV_IOControl函数进行处理。

 MDD层是微软的标准实现,通过DDSI (device driver service-provider interface )和PDD层实现进行连接。MDD通过消息来通知PDD层(PDD_WaveProc处理)

 

MDD层接口函数

·                 WAV_Close

·                 WAV_Deinit

·                 WAV_Init

·                 WAV_IOControl

·                 WAV_Open

·                 WAV_PowerDown

·                 WAV_PowerUp

·                 WAV_Read

·                 WAV_Seek

·                 WAV_Write

DDSI接口函数

·                 PDD_AudioDeinitialize

·                 PDD_AudioGetInterruptType

·                 PDD_AudioInitialize

·                 PDD_AudioMessage

·                 PDD_AudioPowerHandler

·                 PDD_WaveProc

 

但是分层模型也有一定的限制

·                 只支持一个设备

·                 不支持多个流

·                 对循环支持的不好

·                 对多个流数据支持的不是很好

 

l         单片模型

 

 

对于单片模型,WINCE是希望过渡到这个方案上的。该模型下,驱动的移植

还是很简单的。同时,该模型也客服了以前只能通过内核的MIXER来支持多个流的局限,在驱动层面即支持输入和输出多个流的混音操作。

 

l         分层模型的基本运转

分层模型支持同时放音和录音操作。MDD层管理着一个中断处理程序和多个

DMA BUFFERS,一般放音和录音都使用双DMA 缓冲。

比如,放音的时候,应用通过WAVEAPI传递过来一些数据,MDD层通过 PDD_WaveProc 函数发送 WPDM_START消息给PDD,PDD层将数据拷贝到DMA缓冲,并启动硬件放音。当DMA完成一个BUFFER的数据传送后,会产生一个硬件中断,PDD层会设定一个 AUDIO_STATE_OUT_PLAYING标志 。如果MDD发现有更多的数据要传送就会通过WPDM_CONTINUE.消息让PDD层继续负责填充DMA缓冲,否则就发送一个WPDM_ENDOFDATA.消息让PDD层停止DMA。

时间: 2024-10-01 16:49:46

WINCE声音驱动模型概述(1)的相关文章

WINCE声音驱动模型概述(3)--放音的消息解析

放音的消息解析 WINCE的声音驱动模型在放音的工作中定义了21个消息(懒了,不再列举了),但在具体实现中并不是每个消息都必须实现. 消息很多,特别是在具体实现中需要和DMA操作模型配合使用,因此理解消息的用途和推敲它们之间的关系就显得格外重要了! 通过仔细推敲它们之间的关系,我们可以将放音的整个过程规划成如下一些状态,并用状态迁移图来理解消息的使用,整个过程的操作就非常简单了.

WinCE USB驱动开发经验谈

WinCE USB驱动开发经验谈 随着USB2.0设备的不断增加,USB设备驱动开发在嵌入式开发中变的越来越重要.Windows CE支持USB 2.0更是对这一波新技术浪潮产生巨大的推动.近期我负责一个这样的项目,在WinCE下开发USB接口的外围设备驱动.当时做这个项目花费了我相当多的时间和精力,错走许多冤枉路使我精疲力尽. 项目需求是在已调好的ARM9板子上开发USB WiFi无线网卡的驱动程序,具体要求是驱动程序平台是WinCE,CPU类型支持ARM构架,要能比较方便地移植到X86:驱动

《CUDA C编程权威指南》——第3章 CUDA执行模型 3.1 CUDA执行模型概述

第3章 CUDA执行模型 本章内容: 通过配置文件驱动的方法优化内核 理解线程束执行的本质 增大GPU的并行性 掌握网格和线程块的启发式配置 学习多种CUDA的性能指标和事件 了解动态并行与嵌套执行 通过上一章的练习,你已经学会了如何在网格和线程块中组织线程以获得最佳的性能.尽管可以通过反复试验找到最佳的执行配置,但你可能仍然会感到疑惑,为什么选择这样的执行配置会更好.你可能想知道是否有一些选择网格和块配置的准则.本章将会回答这些问题,并从硬件方面深入介绍内核启动配置和性能分析的信息. 3.1

《CUDA C编程权威指南》——3.1节CUDA执行模型概述

3.1 CUDA执行模型概述 一般来说,执行模型会提供一个操作视图,说明如何在特定的计算架构上执行指令.CUDA执行模型揭示了GPU并行架构的抽象视图,使我们能够据此分析线程的并发.在第2章里,已经介绍了CUDA编程模型中两个主要的抽象概念:内存层次结构和线程层次结构.它们能够控制大规模并行GPU.因此,CUDA执行模型能够提供有助于在指令吞吐量和内存访问方面编写高效代码的见解. 在本章会重点介绍指令吞吐量,在第4章和第5章里会介绍更多的关于高效内存访问的内容.3.1.1 GPU架构概述 GPU

新手 的麻烦-驾校项目,车内和监控室通话.声音驱动

问题描述 驾校项目,车内和监控室通话.声音驱动 小弟新生一名,刚毕业. 今天老板让我写个声音驱动. 驾校的科目二考试项目:车里和监控室可以实现通话.车里说话 监控室可以听见 .监控室说话 车里能听见. 谢谢各位大侠,说说怎么做. 给点意见,虚心接受.

总线设备驱动模型---platform篇

  linux从2.6起就加入了一套新的驱动管理和注册的机制platform平台总线,是一条虚拟的总线,设备用platform_device表示,驱动用platform_driver进行注册.于传统的bus/device/driver机制相比,platform由内核进行统一管理,在驱动中使用资源,提高了代码的安全性和可移植性. 下面来看看内核时怎么注册platform总线的过程 点击(此处)折叠或打开 int __init platform_bus_init(void) {     int er

Linux与Windows的设备驱动模型对比:架构、API 和开发环境比较

名词缩写: API 应用程序接口(Application Program Interface ) ABI 应用系统二进制接口(Application Binary Interface) 设备驱动是操作系统的一部分,它能够通过一些特定的编程接口便于硬件设备的使用,这样软件就可以控制并且运行那些设备了.因为每个驱动都对应不同的操作系统,所以你就需要不同的 Linux.Windows 或 Unix 设备驱动,以便能够在不同的计算机上使用你的设备.这就是为什么当你雇佣一个驱动开发者或者选择一个研发服务商

Linux 与 Windows 的设备驱动模型对比:架构、API 和开发环境比较

名词缩写: API 应用程序接口Application Program Interface ABI 应用系统二进制接口Application Binary Interface 设备驱动是操作系统的一部分,它能够通过一些特定的编程接口便于硬件设备的使用,这样软件就可以控制并且运行那些设备了.因为每个驱动都对应不同的操作系统,所以你就需要不同的 Linux.Windows 或 Unix 设备驱动,以便能够在不同的计算机上使用你的设备.这就是为什么当你雇佣一个驱动开发者或者选择一个研发服务商提供者的时

linux RTC 驱动模型分析

最近学习RTC(real time clock)实时时钟,RTC实时时钟主要作用是给Linux系统提供时间.RTC因为是电池供电的,所以掉电后时间不丢失.Linux内核把RTC用作"离线"的时间 与日期维护器.当Linux内核启动时,它从RTC中读取时间与日期,作为基准值.在运行期间内核完全抛开RTC,以软件的形式维护系统的当前时间与日 期,并在需要时将时间回写RTC芯片.另外如果RTC提供了IRQ中断并且可以定时,那么RTC还可以作为内核睡眠时唤醒内核的闹钟.应用程序可以用 RTC提