Considerações sobre streaming de kernel
Este artigo esclarece os requisitos e considerações especiais para o streaming de kernel relacionado ao streaming de áudio de bypass bluetooth.
O driver de áudio deve dar suporte total ao driver de porta WaveRT, incluindo o "modo de pull". Para obter mais informações, consulte Introdução ao driver de porta WaveRT. Embora não haja nenhum requisito para implementar um mecanismo de áudio de hardware para a saída de bypass SCO (orientada a conexão síncrona), não há nenhum dano ao fazer isso.
Os requisitos do logotipo do Windows para suporte ao formato incluem uma exceção para Bluetooth.
O driver de áudio deve dar suporte aos formatos possíveis por meio do hardware de sideband, normalmente streaming de áudio mono de 8kHz.
Topologia
Todos os dispositivos Hands-Free Bluetooth dão suporte à captura e à renderização. O driver de áudio deve expor uma topologia de streaming de kernel (KS) para o dispositivo Hands-Free, conforme mostrado no diagrama a seguir, para dar suporte à renderização e à captura.
Nota: O desenvolvedor do driver de áudio pode escolher se deseja implementar um único filtro para capturar e renderizar caminhos ou filtros separados. No entanto, o dispositivo HFP permite apenas um único objeto de arquivo na interface do dispositivo GUID_DEVINTERFACE_BLUETOOTH_HFP_SCO_HCIBYPASS. Portanto, um design que usa dois filtros precisa permitir que ambos os filtros compartilhem o objeto de arquivo único.
Os nós DAC e ADC representam as conversões analógicas/digitais, mas não dão suporte a nenhuma propriedade KS.
Os nós de volume dão suporte a KSPROPERTY_AUDIO_VOLUMELEVEL e KSEVENT_CONTROL_CHANGE enviando os IOCTLs SETVOLUME e GETVOLUMESTATUSUPDATE para o driver HFP.
O nó de volume deve ser implementado da seguinte maneira:
- Se o fone de ouvido Bluetooth der suporte ao controle de volume, o driver de áudio deverá incluir um nó de volume em sua topologia KS. Os manipuladores de propriedade de volume do driver de áudio enviam os IOCLTs acima para o driver HFP Bluetooth para lidar com o volume.
- Se o fone de ouvido Bluetooth não implementar um volume de hardware e o codec (ou DSP) tiver um volume de hardware, o driver de áudio deverá manipular o controle de volume no codec (ou DSP).
- Se o fone de ouvido Bluetooth nem o dispositivo de áudio tiverem controles de volume de hardware, nenhum nó de volume deverá ser apresentado e o Windows inserirá um nó de controle de volume de software.
- O nó mudo é opcional. O driver de áudio deverá implementar o nó mudo se e somente se o DSP ou o codec de áudio fornecer a capacidade de silenciar o sinal de bypass do PCM antes de passá-lo para o controlador Bluetooth. Os nós mudo dão suporte a KSPROPERTY_AUDIO_MUTE.
Solicitações de propriedade
O driver de áudio usa as propriedades KS a seguir para obter informações sobre qualquer tomada de áudio ou tomadas no caminho de áudio. O driver de áudio também pode usar a solicitação de propriedade apropriada para fazer ou interromper uma conexão com qualquer dispositivo de áudio Bluetooth no caminho de áudio.
KSPROPERTY_JACK_DESCRIPTION
Essa propriedade retorna uma estrutura KSJACK_DESCRIPTION . O driver de áudio deve definir os campos de KSPROPERTY_JACK_DESCRIPTION da seguinte maneira.
- ChannelMapping = KSAUDIO_SPEAKER_MONO
- Cor = 0
- ConnectionType = eConnTypeOtherDigital
- GeoLocation = eGeoLocNotApplicable
- GenLocation = eGenLocOther
- PortConnection = ePortConnUnknown
- IsConnected = <BOOL para conexão atual status>
KSPROPERTY_JACK_DESCRIPTION2
Essa propriedade retorna uma estrutura KSJACK_DESCRIPTION2 . O driver de áudio deve definir os campos KSPROPERTY_JACK_DESCRIPTION2 da seguinte maneira.
- DeviceStateInfo = 0
- JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY
KSPROPERTY_ONESHOT_RECONNECT
O filtro do driver de áudio deve dar suporte a KSPROPERTY_ONESHOT_RECONNECT. Para criar e inicializar essa estrutura, o driver de áudio envia IOCTL_BTHHFP_DEVICE_REQUEST_CONNECT para o driver HFP. O driver HFP conclui essa solicitação e tenta se conectar ao dispositivo de áudio Bluetooth de forma assíncrona.
KSPROPERTY_ONESHOT_DISCONNECT
O filtro do driver de áudio deve dar suporte a KSPROPERTY_ONESHOT_DISCONNECT. Para criar e inicializar essa estrutura, o driver de áudio envia IOCTL_BTHHFP_DEVICE_REQUEST_DISCONNECT para o driver HFP. O driver HFP conclui essa solicitação e tenta se desconectar do dispositivo de áudio Bluetooth de forma assíncrona.
Quando um driver de áudio dá suporte a essas propriedades, a caixa de diálogo Som no Painel de Controle expõe os comandos Conectar e Desconectar para o ponto de extremidade HFP.