Sfruttamento A2DP della banda laterale audio

Questo argomento descrive l'offload A2DP della banda audio, disponibile a partire da Windows 11, build 10.0.22000 per Bluetooth.

L'obiettivo principale dell'offload audio A2DP è ridurre il consumo di energia, ad esempio durante la riproduzione musicale.

Questo documento presuppone una certa familiarità con la soluzione esistente di banda sideband HF. Vedi Linee guida per il bypass Bluetooth per i driver audio e le specifiche Bluetooth A2DP a cui si fa riferimento nella sezione vedere anche di questo argomento.

Progettazione dell'architettura della banda laterale

L'offload A2DP della banda audio si basa su progettazioni comprovate esistenti per ridurre il consumo di energia durante la riproduzione di contenuti audio lineari tramite altoparlanti integrati (incorporati) o cuffie analogiche connesse. In breve, questi progetti trasmettono grandi quantità di dati audio (nell'ordine di grandezza di un secondo) in un DSP audio tramite un driver audio specifico del fornitore. I processori principali e la maggior parte degli altri circuiti entrano in uno stato di basso consumo mentre il DSP audio trasmette i dati audio con burst attraverso gli altoparlanti incorporati. Quando i dati audio sono quasi esauriti, il DSP genera un interrupt al driver audio, che segnala al sistema operativo di inviare rapidamente più dati audio tramite il driver audio al DSP.

I componenti grigio chiaro nel diagramma seguente sono forniti dall'IHV.

Stack di driver audio Bluetooth con un driver IHV che utilizza IOCTLs DDI sideband, un nucleo Bluetooth e un driver di trasporto facoltativo con un DSP e un controller Bluetooth nella parte inferiore dello stack

L'offload A2DP della banda audio si basa anche su una progettazione comune per il percorso audio Bluetooth SCO, in cui lo stesso DSP audio è connesso direttamente al controller Bluetooth.

Questa connessione è spesso un'interfaccia I2S o PCM, ma può anche essere un bus più ricco e più complesso, ad esempio SLIMbus. Microsoft si riferisce a questa architettura come sideband audio, riflettendo il fatto che l'audio viene trasferito al controller Bluetooth (o altro) attraverso un percorso alternativo invece dell'interfaccia normale del controller (HCI). In questo caso, il driver audio trasferisce i dati audio dal sistema operativo al DSP audio, il DSP audio trasferisce i dati sulla connessione sideband al controller del bus hardware e il controller trasmette i dati audio al dispositivo connesso. Per l'audio bidirezionale, si verifica anche la direzione inversa. Anche se sono coinvolti più componenti, questo può avere vantaggi rispetto alla normale interfaccia del controller. In alcuni casi d'uso (principalmente chiamate cellulari), l'intero percorso del segnale audio end-to-end viene gestito dal firmware, scaricato dai processori principali. Può anche fornire un'interfaccia migliore per il trasferimento di dati audio in tempo reale/isocroni da e verso il software host. Per questa connessione sideband, Microsoft definisce un DDI sideband usato dal driver audio per supportare gli endpoint audio con questa progettazione fisica.

Componenti

Driver audio IHV (audio DSP driver)

Questo driver controlla gli endpoint audio integrati, l'audio cellulare e le funzioni sideband/offload HFP/SCO. Questa funzionalità richiede che il driver supporti anche l'offload A2DP. Le responsabilità del conducente sono come quelle per HFP/SCO.

Driver e controller di trasporto Bluetooth IHV

L'offload A2DP non è definito in uno standard SIG Bluetooth. Questa funzionalità migliora e aggiunge comandi HCI Bluetooth definiti da Microsoft. Per supportare questa funzionalità, il controller Bluetooth IHV o un driver IHV supporterà questi comandi.

Driver del profilo A2DP

Questo driver viene fornito da Windows. Le funzioni includono quanto segue.

  • Implementa le specifiche A2DP e AVDTP
  • Espone le istanze dell'interfaccia del dispositivo PnP (interfaccia sideband A2DP) affinché il driver audio IHV possa esplorare, aprire e inviare richieste.
  • Supporta le richieste IOCTL sideband specificate in questo documento
  • Invia comandi HCI Bluetooth definiti da Microsoft per l'offload A2DP

Requisito del driver audio IHV (driver audio DSP)

Se un driver audio in un sistema è configurato per lo streaming sideband A2DP, pubblica un'interfaccia del dispositivo con GUID di classe impostata su GUID_SIDEBANDAUDIO_A2DP_SUPPORT_INTERFACE {2BC51EE4-07AF-49CF-B04B-FB3F1C26AADC}. Questa interfaccia del dispositivo deve essere presente non più tardi dell'avvio PnP del driver audio.

Strutture di dati a banda laterale

Si noti che alcune strutture di dati e costanti usate dal driver audio sono definite nell'intestazione sidebandaudio.h .

Le seguenti strutture dati vengono utilizzate per l'offload A2DP del subcanale audio.

Descrittore del dispositivo - SIDEBANDAUDIO_DEVICE_DESCRIPTOR

Elemento Descrizione
NumeroDiEndpoint Indica il numero di endpoint in un dispositivo connesso

Il dispositivo connesso può essere un dispositivo composito contenente più endpoint audio (altoparlante, microfono e così via). Il driver audio può eseguire l'iterazione per ogni endpoint e ottenere altri dettagli per compilare filtri KS per ogni endpoint.

Descrittore endpoint - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR

Il SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR viene definito come segue.

Elemento Descrizione
CbSize Dimensioni totali del descrittore endpoint. Questo include il buffer per l'archiviazione delle stringhe.
ContainerId GUID per gli endpoint. Un GUID comune per più endpoint indica che tali endpoint sono contenuti nello stesso contenitore fisico. Il sistema operativo può facilmente associare tali endpoint per diversi scenari.
Categoria KSPIN_DESCRIPTOR. Categoria per indicare il fattore di forma per ogni endpoint.
Direzione Indica la direzione del flusso di dati di Capture o di Render.
Funzionalità (Vedere la tabella seguente)
NomeAmichevole Nome descrittivo per l'endpoint da applicare al DEVPKEY_DeviceInterface_FriendlyName nell'interfaccia filtro endpoint KS.
VolumePropertyValuesSize Dimensione della struttura di KSPROPERTY_DESCRIPTION che descrive la gradazione e l'intervallo del volume per ogni canale.
SidetoneVolumePropertyValueSize Dimensioni della struttura KSPROPERTY_DESCRIPTION che descrive la regolazione e l'intervallo di volume per ogni canale per il Sidetone.

Descrittore di endpoint - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR - Funzionalità

Le funzionalità sono definite come segue.

Elemento Descrizione
Volume Endpoint supporta il controllo volume
Muto L'endpoint supporta il controllo disattiva audio
Sidetone Endpoint supporta il controllo del Sidetone
Commenti L'endpoint ha associato un canale di feedback

SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2

La banda laterale A2DP usa una versione aggiornata della struttura di SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR esistente per fornire ulteriori informazioni necessarie al sistema audio Windows per l'identificazione degli endpoint - SIDEBANDAUDIO_ENDPOINT_DESCRIPTOR2.

// Number of device properties that shall be added to the audio filter factory interface.
ULONG                                   FilterInterfacePropertyCount;
DEVPROPERTY*                            FilterInterfaceProperties;

Il driver audio ottiene questa struttura di dati utilizzando la nuova richiesta IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2. Al completamento della richiesta, il driver audio aggiunge queste proprietà del dispositivo all'interfaccia del filtro audio di topologia.

Parametri dell'interfaccia audio

La scelta e la progettazione del trasporto audio tra il dispositivo audio e il controller Bluetooth è specifica del fornitore. Questo trasporto audio è spesso un'interfaccia I2S o PCM, ma può anche essere un bus più ricco e più complesso, ad esempio SLIMbus o potenzialmente SoundWire. Questa progettazione di funzionalità non pone requisiti specifici per il trasporto audio. Tuttavia, se il codec Bluetooth viene implementato nel DSP audio, il controller Bluetooth sarà in grado di estrarre i fotogrammi codificati dai dati trasmessi attraverso il trasporto audio per inserire questi fotogrammi in pacchetti multimediali AVDTP per la trasmissione.

L'installazione e la configurazione (se presenti) del trasporto audio sono considerate attività specifiche del fornitore. Questo è facilitato dai parametri dell'interfaccia audio specifici al fornitore trasferiti tra i componenti all'interno di questa funzionalità. I parametri specifici del fornitore sono definiti comunemente dal fornitore del driver audio e dal controller Bluetooth e/o dal fornitore del driver di trasporto. I parametri vengono usati dal dispositivo audio e dal controller Bluetooth per configurare il trasporto audio tra il DSP audio e il controller Bluetooth.

Ad esempio, questi dati possono includere un ID di trasporto se sono presenti più connessioni fisiche o logiche, configurando l'uso di segnali di un'interfaccia PCM o il formato dei dati audio nel trasporto.

Il driver audio imposta e ottiene parametri di interfaccia audio specifici del fornitore usando SIOPs, che identificano i dati usando un GUID e un numero intero. Tuttavia, per mantenere un set di comandi HCI Bluetooth più naturale, i comandi HCI definiti da Microsoft passano parametri di interfaccia audio specifici del fornitore usando la struttura seguente.

Parametro dell'interfaccia audio

Campo Ottetto
ID del fornitore 0..3
ID parametro specifico fornitore 4..5
Lunghezza del Valore Specifico del Fornitore = (n-9) 6
Valore specifico del fornitore 7.. n

Un ID fornitore è definito in Numeri assegnati Bluetooth: https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers.

Il driver A2DP esegue una conversione diretta tra vendor-SIOPs, che sono una struttura di dati più naturale per il driver audio e un parametro di interfaccia audio più naturale per il Bluetooth HCI. Il GUID SIOP del fornitore è costruito da un GUID di base più un ID fornitore Bluetooth di 4 caratteri. Solo l'ID fornitore (non l'intero GUID) passa attraverso l'HCI Bluetooth.

Il GUID di base è SIDEBANDAUDIO_PARAMS_SET_A2DP.

A2DP SIOPs definiti da Microsoft

Microsoft definisce due SIOPs per A2DP che forniscono informazioni sul codec. I fornitori possono definire SIOPs aggiuntivi per supportare l'implementazione.

Codec (codec-SIOP)

Il driver audio esprime il proprio elenco di codec A2DP supportati (se presenti) che usano questo SIOP. I campi SIDEBANDAUDIO_IO_PARAM_HEADER per questo SIOP vengono impostati come segue.

Campo Valore
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODECS (1)
Misura Dimensione totale dell'elenco delle capacità codec che segue questa intestazione

I dati che seguono questa intestazione sono una sequenza di strutture di funzionalità codec di dimensioni variabili, come descritto in Informazioni sulle funzionalità codec riportate sopra.

Per il resto di questo argomento, questo parametro viene definito codecs-SIOP.

Codec configurato (configured-codec-SIOP)

Il driver audio può recuperare il codec A2DP attualmente configurato usando questo SIOP. I campi SIDEBANDAUDIO_IO_PARAM_HEADER per questo SIOP vengono impostati come segue.

Campo Valore
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP ({8FE0297F-3AE6-4384-ACE3-87589E571B9C})
TypeId SIDEANDAUDIO_PARAM_A2DP_CONFIGURED_CODEC (2)
Misura Dimensioni totali della funzionalità codec che segue questa intestazione

I dati che seguono questa intestazione sono una singola struttura di funzionalità codec di dimensioni variabili, come descritto nelle informazioni sulle funzionalità del codec riportate in precedenza.

Questo SIOP è aggiornabile, il che significa che il driver audio deve usare la richiesta di IOCTL_SBAUD_GET_SIOP_UPDATE per rimanere informati delle modifiche nel codec configurato.

Per il resto di questo argomento, questo parametro viene definito codec-configurato-SIOP.

Modalità codec di latenza attiva (codec-latency-mode-SIOP)

Il driver audio può recuperare la modalità di latenza attiva del codec A2DP attualmente configurato usando questo SIOP. I campi SIDEBANDAUDIO_IO_PARAM_HEADER per questo SIOP vengono impostati come segue.

Campo Valore
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_LATENCY_MODE
Misura 1 byte

I dati che seguono questa intestazione sono un singolo byte interpretato come intero senza segno a 8 bit. Il valore SIDEBANDAUDIO_CODEC_MODE_HIGH_QUALITY indica che il codec attualmente configurato funziona in modalità di alta qualità, mentre il valore SIDEBANDAUDIO_CODEC_MODE_LOW_LATENCY indica che il codec funziona in modalità a bassa latenza. Questo SIOP è aggiornabile, il che significa che il driver audio deve usare la richiesta di IOCTL_SBAUD_GET_SIOP_UPDATE per rimanere informati delle modifiche nella modalità di latenza.

Attualmente, questo SIOP viene usato solo quando il codec adattivo aptX è attivo. Per altre informazioni su aptX, vedi Qualcomm aptX Adaptive Audio.

Per il resto di questo argomento, questo parametro viene definito codec-latency-mode-SIOP.

Codec L2CAP MTU size (mtu-size-SIOP)

Il driver audio può recuperare le dimensioni correnti di MTU L2CAP (in byte) usando questo SIOP. I campi SIDEBANDAUDIO_IO_PARAM_HEADER per questo SIOP vengono impostati come segue.

Campo Valore
ParamsSet SIDEBANDAUDIO_PARAMS_SET_A2DP
TypeId SIDEBANDAUDIO_PARAM_A2DP_CODEC_MTU_SIZE
Misura 2 byte

I dati che seguono questa intestazione sono 2 byte interpretati come un intero senza segno a 16 bit. Questo SIOP è aggiornabile, il che significa che il driver audio deve usare la richiesta di IOCTL_SBAUD_GET_SIOP_UPDATE per rimanere informati delle modifiche apportate alle dimensioni MTU.

Attualmente, questo SIOP viene usato solo quando il codec adattivo aptX è attivo. Per altre informazioni su aptX, vedi Qualcomm aptX Adaptive Audio.

Per il resto di questo argomento, questo parametro viene definito mtu-size-SIOP.

Uso di SIOP definiti dal fornitore

Il driver audio può impostare SIOPs definiti dal fornitore.

Vendor-SIOPs impostate dopo aver aperto l'interfaccia sideband e prima di eseguire IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR

Il driver A2DP salva i valori SIOP in una raccolta di SIOPs del fornitore della configurazione di sistema. Il driver A2DP invia questa raccolta al controller Bluetooth (usando HCI_VS_MSFT_Avdtp_Capabilities_Configuration) durante la gestione di IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2. Tutti i parametri dell'interfaccia audio restituiti dal controller Bluetooth vengono archiviati anche nella raccolta di SIOP del fornitore della configurazione del sistema. Il driver audio può ottenere questi valori in qualsiasi momento al termine dell'IOCTL.

SIOP fornitore impostato dopo IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2

Il driver A2DP rifiuta qualsiasi SIOP inviato dal driver audio dopo IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR2.

SIOP del fornitore impostati dopo IOCTL_SBAUD_GET_ENDPOINT_DESCRIPTOR e prima di IOCTL_SBAUD_STREAM_OPEN

Il driver A2DP salva i valori SIOP in una raccolta di SIOPs del fornitore di configurazione di flusso. Il driver A2DP invia questa raccolta al controller Bluetooth (usando HCI_VS_MSFT_Avdtp_Open) durante la gestione IOCTL_SBAUD_STREAM_OPEN. Tutti i parametri dell'interfaccia audio restituiti dal controller Bluetooth vengono archiviati anche nella raccolta di SIOPs del fornitore della configurazione di flusso. Il driver audio può ottenere questi valori in qualsiasi momento al termine dell'IOCTL.

Il driver A2DP cancella la raccolta delle SIOPs del fornitore di configurazioni di flusso quando gestisce IOCTL_SBAUD_STREAM_CLOSE. Non cancella la raccolta di SIOPs del fornitore della configurazione del sistema.

Interfaccia A2DP a banda laterale

Il sideband A2DP utilizza le richieste generiche IOCTL_SBAUD_*. Vedi l'intestazione sidebandaudio.h per un elenco completo dei file IOCTL. In questa sezione vengono fornite informazioni specifiche di A2DP.

Classe di interfaccia PnP

La classe di interfaccia è GUID_DEVINTERFACE_A2DP_SIDEBAND_AUDIO per l'audio Bluetooth a banda laterale A2DP.

IOCTLs usati per le transizioni di stato dei pin KS

Il driver audio invia queste richieste su determinate transizioni di stato pin KS.

Estensioni Bluetooth HCI definite da Microsoft per l'offload di A2DP

Vedere Estensioni HCI Bluetooth definite da Microsoft per le estensioni attualmente definite.

HCI_VS_MSFT_Read_Supported_Features

L'offload A2DP della banda sideband audio migliora il comando HCI_VS_MSFT_Read_Supported_Features definendo un altro bit nel parametro restituito Supported_features per indicare il supporto per i comandi di offload AVDTP. Quando viene restituito questo bit, i comandi rimanenti in questa sezione saranno supportati.

Per una descrizione del comando e dei parametri restituiti, vedere HCI_VS_MSFT_Read_Supported_Features.

Per i valori Supported_features (8 ottetti), vedere anche HCI_VS_MSFT_Read_Supported_Features. Viene usato un valore aggiuntivo per indicare che il controller supporta l'offload AVDTP e i comandi HCI_VS_MSFT_Avdtp_* descritti negli eventi HCI Bluetooth AVDTP definiti da Microsoft.

Bluetooth Host-Controller Interface (HCI) specifica tutte le interazioni tra un host e un controller di radio Bluetooth. Le specifiche Bluetooth consentono ai comandi e agli eventi HCI definiti dal fornitore di abilitare l'interazione non standardizzata tra host e controller. Microsoft definisce comandi ed eventi HCI specifici del fornitore utilizzati da Windows. Microsoft definisce i seguenti comandi HCI usati per l'offload della banda audio.

I comandi HCI AVDTP seguenti sono descritti nell'argomento Bluetooth - Eventi AvDTP Bluetooth HCI definiti da Microsoft.

HCI_VS_MSFT_Avdtp_Capabilities_Configuration

Valore codice operativo sottocomando: 7

Configura l'interfaccia di trasporto audio e restituisce le funzionalità codec del controller Bluetooth, che è un elenco di blocchi di informazioni sui codec. Ogni blocco di informazioni sul codec descrive un codec supportato. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

HCI_VS_MSFT_Avdtp_Open

Valore opcode del sottocomando: 8

Alloca e configura le risorse di offload AVDTP all'interno del controller. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp__Open.

HCI_VS_MSFT_Avdtp_Start

Valore del codice operativo del sottocomando: 9

Questo comando avvia lo streaming audio dal trasporto audio ai pacchetti AVDTP multimediali trasmessi. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp_Start.

HCI_VS_MSFT_Avdtp_Suspend

Valore opcode sottocomando: 0xA

Arresta l'attività di streaming avviata da HCI_VS_MSFT_Avdtp_Start. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp_Suspend.

HCI_VS_MSFT_Avdtp_Close

Valore opcode sottocomando: 0xB

Rilascia le risorse di scaricamento AVDTP allocate da HCI_VS_MSFT_Avdtp_Open. Per altre informazioni, vedere HCI_VS_MSFT_Avdtp_Close.

Codec Bluetooth nel DSP audio o nel controller Bluetooth

L'implementazione supporta codec Bluetooth ospitati nel controller DSP audio e/o Bluetooth. Codec-SIOP fornisce un meccanismo per il driver audio per indicare un elenco di codec supportati. Analogamente, il comando HCI_VS_MS_Avdtp_Capabilities_Configuration consente al controller Bluetooth di restituire un elenco di codec supportati. Nota, almeno uno dei driver A2DP e il controller Bluetooth restituiranno un elenco di codec supportati.

Il driver A2DP non può intersecare o unire in modo affidabile elenchi di codec A2DP supportati sia dal driver audio che dal controller Bluetooth. Se entrambi restituiscono codec supportati da A2DP, Windows usa solo l'elenco restituito dal driver di trasporto Bluetooth.

Se la soluzione IHV richiede l'intersezione o l'unione delle capacità relative ai codec tra le funzionalità del DSP audio e quelle del controller Bluetooth, il driver audio può indicare le sue capacità tramite codec-SIOP (se la rappresentazione standard è sufficiente) o un venditore-SIOP. Il driver A2DP passa SIOPs al controller Bluetooth che può quindi incrociare le funzionalità e restituire il set di codec supportati risultante da HCI_VS_MSFT_Avdtp_Capabilities_Configuration.

Vedere anche

Estensioni HCI Bluetooth definite da Microsoft

Linee guida per il bypass Bluetooth per i driver audio

Linee guida per la gestione del controllo alimentazione Bluetooth del bus di trasporto

A2DP 1.3.1 (Bluetooth Specification)

AVDTP 1.3 (Specifiche Bluetooth)