Implementação do temporizador de inatividade da classe de dispositivo de áudio
O driver do sistema PortCls utiliza os recursos de detecção de energia ociosa do sistema para implementar um temporizador de inatividade para seus clientes de áudio. O PortCls programa dois valores de tempo limite e um estado de energia ocioso desejado no temporizador quando ele o inicializa. PortCls monitora todos os acessos (como E/S e acessos de propriedade) do dispositivo e redefine efetivamente a contagem de temporizador em cada acesso. Se o temporizador atingir o tempo limite, o sistema solicitará que um IRP de energia coloque o dispositivo no estado ocioso desejado. Depois que o dispositivo tiver sido colocado no estado ocioso, PortCls ligará o dispositivo de volta em caso de nova atividade de acesso.
PortCls contém valores padrão embutidos em código para os tempos limite ociosos e o estado de energia ocioso. Os fornecedores de hardware podem, opcionalmente, substituir os valores padrão escrevendo seus próprios valores em chaves específicas do driver no registro do sistema. Dessa forma, os fornecedores podem selecionar os valores de parâmetro de energia ociosa que são mais adequados para seus dispositivos.
Os fornecedores podem substituir os valores padrão dos seguintes parâmetros de energia ociosa:
ConservationIdleTime
Esse parâmetro especifica o intervalo de tempo limite ocioso quando o sistema está em execução no modo de conservação de energia. Esse é o modo que normalmente é usado quando o sistema está em execução na energia da bateria. O valor padrão para esse parâmetro é 0, o que desabilita o temporizador de energia ociosa no modo de conservação. O fornecedor de hardware pode definir o valor usando um arquivo inf como este.
[MyAudioDevice.AddReg] HKR,PowerSettings,ConservationIdleTime,%REG_BINARY%,1e,00,00,00
O fragmento de arquivo INF anterior mostra um valor hexadecimal (heximais) de "1e" para o ConservationIdleTime, e isso equivale a um tempo limite ocioso de 30 segundos.
FLG_ADDREG_BINVALUETYPE
Os outros parâmetros são usados para controlar como a chave do Registro é adicionada. Por exemplo, %REG_BINARY% indica que os dados são armazenados como dados "brutos". Para obter mais informações, consulte Diretiva AddReg do INF.
PerformanceIdleTime
Esse parâmetro especifica o intervalo de tempo limite ocioso quando o sistema está em execução no modo de desempenho. Esse é o modo que normalmente é usado quando o sistema está em execução na energia AC. O valor padrão para esse parâmetro é 0, o que desabilita o temporizador de energia ociosa no modo de desempenho.
O fornecedor de hardware pode definir o valor usando um arquivo inf como este.
[MyAudioDevice.AddReg] HKR,PowerSettings,PerformanceIdleTime,%REG_BINARY%,2c,01,00,00
O valor da chave especifica o intervalo de tempo limite em segundos. Neste exemplo, o valor de 2c,01 será de 300 segundos ou cinco minutos.
IdlePowerState
Esse parâmetro especifica o estado de energia em que o dispositivo será colocado se o período de tempo limite ocioso expirar. O valor padrão para esse parâmetro é 3, correspondente ao estado de energia do dispositivo D3, que é o estado de baixa potência do dispositivo de menor potência. O fornecedor de hardware pode definir o valor usando um arquivo inf como este.
[MyAudioDevice.AddReg] HKR,PowerSettings,IdlePowerState,%REG_BINARY%,03,00,00,00
O valor colocado na chave deve ser 0, 1, 2 ou 3, correspondente ao estado de energia do dispositivo D0, D1, D2 ou D3, respectivamente.
As três chaves do Registro de energia ociosas só existirão se o arquivo INF de instalação do dispositivo as criar. Antes de configurar o temporizador de energia ociosa, o PortCls tenta recuperar os parâmetros de energia ociosa específicos do driver do registro. PortCls usa os valores padrão no lugar de quaisquer parâmetros de energia ociosa que não encontra no Registro. Conforme explicado anteriormente, os valores de parâmetro ociosos de energia padrão desabilitam o temporizador ocioso.
Para obter mais informações sobre como especificar os parâmetros ConservationIdleTime, PerformanceIdleTime e IdlePowerState , consulte as definições dos últimos três parâmetros de chamada em PoRegisterDeviceForIdleDetection.
Exemplo
Por exemplo, um fornecedor de hardware pode querer especificar os seguintes parâmetros de energia ociosa para um dispositivo de áudio: ConservationIdleTime = 0x0000001e (30 segundos), PerformanceIdleTime = 0x0000012c (300 segundos) e IdlePowerState = 0x00000003 (estado de energia do dispositivo D3). Para habilitar essas configurações, o arquivo de instalação do dispositivo pode incluir uma seção AddReg do INF que contém as seguintes diretivas:
[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