音频设备类不活动计时器实现

PortCls 系统驱动程序利用系统的电源空闲检测功能,为其音频客户端实现非活动计时器。 在初始化计时器时,PortCls 会将两个超时值和所需的空闲电源状态编程为计时器。 PortCls 会监视音频设备的任何访问(如 I/O 和属性访问),并在每次访问时实际重置计时器计数。 如果计时器超时,系统将请求电源 IRP 将设备置于所需的空闲状态。 将设备置于空闲状态后,PortCls 将在新的访问活动中为设备提供支持。

PortCls 包含空闲超时和空闲电源状态的硬编码默认值。 硬件供应商可以根据需要覆盖默认值,方法是将自己的值写入系统注册表中的驱动程序特地项。 这样,供应商就可以选择最适合其设备的电源空闲参数值。

供应商可以覆盖以下电源空闲参数的默认值:

  • ConservationIdleTime

    系统在节能模式下运行时,此参数将指定空闲超时间隔。 这是系统在电池供电时通常使用的模式。 此参数的默认值为 0,这会在节能模式下禁用电源空闲计时器。 硬件供应商可以使用如下所示的 inf 文件设置值。

    [MyAudioDevice.AddReg]
    HKR,PowerSettings,ConservationIdleTime,%REG_BINARY%,1e,00,00,00
    

前面的 INF 文件片段显示 ConservationIdleTime 的十六进制 (hex) 值“1e”,这相当于 30 秒的空闲超时。

FLG_ADDREG_BINVALUETYPE

其他参数用于控制注册表项的添加方式。 例如,%REG_BINARY% 指示将数据存储为“原始”数据。 有关详细信息,请参阅 INF AddReg 指令

  • PerformanceIdleTime

    系统在性能模式下运行时,此参数将指定空闲超时间隔。 这是系统使用交流电源时通常使用的模式。 此参数的默认值为 0,这会在性能模式下禁用电源空闲计时器。

    硬件供应商可以使用如下所示的 inf 文件设置值。

    [MyAudioDevice.AddReg]
    HKR,PowerSettings,PerformanceIdleTime,%REG_BINARY%,2c,01,00,00
    

    项的值指定超时间隔(以秒为单位)。 在此示例中,2c,01 的值将为 300 秒或 5 分钟。

  • IdlePowerState

    此参数指定在空闲超时期限到期时将设备置于的电源状态。 此参数的默认值为 3,对应于设备电源状态 D3,这是最低功率设备的低功率状态。 硬件供应商可以使用如下所示的 inf 文件设置值。

    [MyAudioDevice.AddReg]
    HKR,PowerSettings,IdlePowerState,%REG_BINARY%,03,00,00,00
    

    项中放置的值应分别为 0、1、2 或 3,分别对应于设备电源状态 D0、D1、D2 或 D3。

仅当设备安装 INF 文件创建时,才存在三个电源空闲注册表项。 在配置电源空闲计时器之前,PortCls 会尝试从注册表中检索驱动程序特定的电源空闲参数。 PortCls 会使用默认值来取代在注册表中找不到的任何电源空闲参数。 如前所述,默认电源空闲参数值会禁用空闲计时器。

有关指定 ConservationIdleTimePerformanceIdleTimeIdlePowerState 参数的详细信息,请参阅 PoRegisterDeviceForIdleDetection 中最后三个调用参数的定义。

示例

例如,硬件供应商可能想要为音频设备指定以下电源空闲参数:ConservationIdleTime = 0x0000001e(30 秒)、PerformanceIdleTime = 0x0000012c(300 秒)和 IdlePowerState = 0x00000003(设备电源状态 D3)。 若要启用这些设置,设备安装文件可以包含具有以下指令的 INF AddReg 部分

[MyAudioDevice.AddReg]
HKR,PowerSettings,ConservationIdleTime,%REG_BINARY%,1e,00,00,00
HKR,PowerSettings,PerformanceIdleTime,%REG_BINARY%,2c,01,00,00
HKR,PowerSettings,IdlePowerState,%REG_BINARY%,03,00,00,00

另请参阅

PoRegisterDeviceForIdleDetection