Implementazione dell'HAL USB

La versione Android 8.0 sposta la gestione dei comandi USB dagli script init a un demone USB nativo per una migliore configurazione e affidabilità del codice. Per la configurazione della funzione gadget, gli script init (trigger di proprietà) vengono utilizzati per eseguire operazioni gadget specifiche del dispositivo.

Nelle versioni precedenti, queste configurazioni specifiche del dispositivo venivano ottenute tramite script init specifici del dispositivo (utilizzando trigger di proprietà). Il passaggio a una progettazione HAL (Hardware Abstraction Layer) si traduce in un'implementazione molto più pulita che risolve questi problemi:

  1. Operazioni come le scritture sui nodi sysfs del kernel potrebbero fallire ma non essere propagate al codice del framework che imposta il trigger della proprietà. Di conseguenza, i framework presuppongono erroneamente che le operazioni siano riuscite anche se hanno fallito silenziosamente.
  2. Gli script init hanno un numero limitato di operazioni che possono essere eseguite.

La versione Android 12 aggiunge il supporto HAL del gadget USB per i modelli di controllo di rete (NCM) e le chiamate API che restituiscono sia il numero di versione HAL che la velocità USB. Per ulteriori informazioni sulle chiamate API disponibili tramite l'HAL USB, vedere il riepilogo del pacchetto android.hardware.usb .

HAL e alti

Gli script init specifici del dispositivo sono stati utilizzati in sostituzione dei livelli HAL per eseguire operazioni USB specifiche del dispositivo. USB (tramite ADB) è un'interfaccia primaria per il debug dei problemi di sistema. Avere un demone nativo per eseguire la configurazione USB elimina la dipendenza dal codice del framework, quindi anche se il framework si blocca, USB dovrebbe essere in esecuzione.

Con il modello Treble introdotto anche in Android 8.0, tutti gli HAL sono isolati dai servizi di sistema e devono essere eseguiti nei propri demoni nativi. Ciò elimina la necessità di disporre di un demone USB esclusivo poiché il livello HAL funge anche da demone USB.

L'implementazione HAL predefinita si occupa di tutti i dispositivi precedenti ad Android 8.0. Pertanto, non ci sarebbe alcun lavoro specifico per i dispositivi precedenti ad Android 8.0. Android 8.0 utilizza l'interfaccia HAL per interrogare lo stato delle porte USB ed eseguire scambi di ruoli dati e ruoli di alimentazione.

Implementazione

La nuova interfaccia HAL USB deve essere implementata su ogni dispositivo avviato su Android 8.0. L'implementazione predefinita dovrebbe occuparsi dei dispositivi precedenti ad Android 8.0. L'implementazione predefinita è sufficiente se il dispositivo utilizza la classe dual_role_usb per segnalare lo stato della porta di tipo c. Potrebbero essere necessarie modifiche banali negli script USB specifici del dispositivo per trasferire la proprietà dei nodi typc-c al sistema.