Hardware della fotocamera
Panoramica della topologia
In termini di supporto del driver Windows, il sottosistema della fotocamera contiene componenti off-System su un chip (SoC), ad esempio il sensore della fotocamera, un'unità di messa a fuoco automatica facoltativa e flash, e possibilmente altri hardware associati. L'hardware della fotocamera include anche le unità di elaborazione delle immagini on-SoC.
L'hardware di elaborazione delle immagini on-SoC deve essere gestito dal plug-in del motore di alimentazione (PEP) fornito dal fornitore di SoC. L'hardware di elaborazione delle immagini deve essere enumerato come singolo dispositivo in ACPI e gestito da un driver WDF (Windows Driver Framework). Abilitare la gestione del sistema del timeout del dispositivo di elaborazione delle immagini in modo che il PEP possa controllare qualsiasi topologia di clock e condivisione di power rail univoca per il SoC. Qualsiasi hardware di elaborazione delle immagini on-SoC deve essere disattivato ogni volta che il dispositivo fotocamera è disattivato.
Alcuni progetti SoC hanno un blocco di funzioni condiviso che esegue sia l'acquisizione della fotocamera che altre immagini e l'elaborazione grafica. In una piattaforma che usa tale SoC, il PEP fornito dal fornitore soC deve fare riferimento all'uso di questo blocco condiviso e disattivarlo quando tutti i client sono inattive.
In alcune piattaforme, l'hardware di elaborazione delle immagini on-SoC potrebbe essere condiviso tra due o più dispositivi della fotocamera. In questo caso, l'hardware di elaborazione delle immagini è multiplexed tra i dispositivi della fotocamera. I componenti di ogni dispositivo fotocamera devono essere descritti in modo indipendente nello spazio dei nomi ACPI e devono essere enumerati come oggetti dispositivo separati al gestore di Plug and Play Windows.
Le piattaforme che dispongono di due fotocamere incorporate (o più) sono necessarie da Windows per poter usare (ovvero trasmettere contenuto da) sia (o tutti) contemporaneamente con qualsiasi combinazione di modalità e risoluzioni supportate dalle singole fotocamere. I fornitori di SoC che non possono soddisfare questo requisito devono lavorare direttamente con Microsoft per indicazioni sull'implementazione dei driver e del firmware di sistema.
Configurazione dell'alimentazione supportata
Windows supporta una singola configurazione di risparmio energia hardware per i dispositivi fotocamera nelle piattaforme di standby moderne. In breve, ogni sensore di fotocamera deve essere connesso al sistema su un chip (SoC) tramite un collegamento MIPI-CSI e può essere facoltativamente connesso a un bus I2C e a uno o più pin GPIO. Il dispositivo sensore fotocamera, il suo flash facoltativo e tutti gli altri componenti della fotocamera off-SoC devono essere posizionati su una barra di alimentazione che può essere attivata e disattivata dal firmware ACPI.
Se, oltre a un collegamento MIPI-CSI, il dispositivo fotocamera ha pin I2C o GPIO per controllare il sensore della fotocamera o il dispositivo flash, questi pin devono essere indirizzati ai pin corrispondenti del controller I2C o del controller GPIO nel SoC. L'integratore di sistema deve enumerare le risorse I2C e GPIO sia per il sensore della fotocamera che per il dispositivo flash in un oggetto _CRS nello spazio dei nomi ACPI.
Nota L'integratore di sistema deve lavorare con lo sviluppatore del driver del sottosistema fotocamera per determinare il modo in cui i driver della fotocamera prevedono l'ordine delle risorse GPIO e I2C. Ad esempio, un driver che riceve due risorse I2C distingue tra di essi in base all'ordine in cui vengono visualizzati nell'elenco di risorse. Analogamente, un driver che riceve tre risorse GPIO prevede che queste risorse vengano elencate in un ordine specifico. L'integratore di sistema deve enumerare le risorse I2C e GPIO nello stesso ordine nell'oggetto _CRS.
Il sensore della fotocamera e il dispositivo flash devono essere posizionati su una barra di alimentazione che può essere attivata e disattivata dai metodi di controllo ACPI. È consigliabile usare un pin GPIO dal SoC per controllare l'hardware del commutatore di alimentazione. Il GPIO deve essere enumerato in un'area di operazione GPIO in modo che lo stato possa essere modificato dai metodi di controllo ACPI. L'integratore di sistema deve descrivere la risorsa di alimentazione per un dispositivo fotocamera (sensore, flash o qualsiasi altro componente della fotocamera) nello spazio dei nomi ACPI. Questa risorsa deve includere un metodo _ON e un metodo _OFF per modificare lo stato del segnale GPIO instradato all'hardware del commutatore di alimentazione. Nello spazio dei nomi ACPI del dispositivo fotocamera, l'integratore di sistema deve fornire un oggetto _PR0 e un oggetto _PR3 che fa riferimento alla risorsa di alimentazione.
Quando il driver del controller della fotocamera rileva che tutti i pin di streaming hanno immesso lo stato di KSSTATE_STOP, usa un'interfaccia privata per indicare ai driver che controllano i componenti della fotocamera off-SoC che non sono più necessari. A sua volta, questi driver chiamano il metodo IWDFDevice2::ResumeIdle per indicare al framework driver che l'hardware è inattivo. In risposta, il framework driver avvia una transizione a D3, che causa un flusso di IRP D3 attraverso lo stack di driver del dispositivo fotocamera. Un'IRP D3 è una IRP_MJ_POWER IRP che specifica un valore di enumerazione DEVICE_POWER_STATE di PowerDeviceD3. Il driver ACPI di Windows, Acpi.sys, osserverà l'IRP D3 ed eseguirà il metodo _OFF della risorsa di alimentazione identificata dall'oggetto _PR3 sotto il dispositivo della fotocamera nello spazio dei nomi ACPI.
L'ultima frase del paragrafo precedente presuppone che la risorsa di alimentazione non fornisca alimentazione a dispositivi diversi da quello del dispositivo fotocamera. Se altri dispositivi hanno riferimenti a questa risorsa di alimentazione, Acpi.sys eseguirà il metodo _OFF solo dopo che tutti gli altri dispositivi che fanno riferimento alla risorsa di alimentazione sono passati a D3. Per altre informazioni, vedere Abilitazione delle transizioni a D3cold.
La restituzione dell'hardware della fotocamera allo stato di alimentazione attiva è un processo simile. Quando il driver del controller della fotocamera rileva il primo pin di acquisizione di flusso per immettere lo stato di KSSTATE_ACQUIRE, il driver del controller della fotocamera comunica con i driver per gli altri componenti on-SoC e off-SoC che costituiscono il sottosistema della fotocamera. In risposta, il driver che controlla l'unità di elaborazione delle immagini on-SoC chiama il metodo IWDFDevice2::StopIdle, che informa il PEP che l'hardware dell'unità di elaborazione delle immagini deve essere attivato. Il driver del controller della fotocamera indica ai driver che controllano i componenti della fotocamera off-SoC che devono tornare allo stato attivo. A sua volta, questi driver chiamano StopIdle per informare il framework driver che l'hardware non è più inattivo, che causa un flusso di IRP D0 attraverso lo stack di driver del dispositivo fotocamera. D0 IRP è un IRP_MJ_POWER IRP che specifica un valore di enumerazione DEVICE_POWER_STATE di PowerDeviceD0. Acpi.sys risponde all'IRP D0 eseguendo il metodo _ON della risorsa di alimentazione identificata dall'oggetto _PR0 nello spazio dei nomi ACPI.
Se la piattaforma dispone di più dispositivi fotocamera, ogni dispositivo fotocamera deve avere una propria risorsa di alimentazione e alimentazione commutabile indipendentemente descritta nello spazio dei nomi ACPI. Per ogni dispositivo fotocamera nello spazio dei nomi ACPI, l'integratore di sistema deve fornire un oggetto _PLD che indica se il dispositivo della fotocamera si trova sul lato anteriore o sul retro del computer. Se un dispositivo fotocamera è integrato nel coperchio di un computer a forma di clamshell-form-factor e affronta l'utente quando il coperchio è aperto, l'oggetto _PLD del dispositivo deve indicare che la fotocamera si trova davanti alla piattaforma. Se un dispositivo fotocamera è integrato nel coperchio di un computer a forma di clamshell-form-factor e si trova lontano dall'utente quando il coperchio è aperto, questo dispositivo _PLD oggetto deve indicare che la fotocamera è sul retro del sistema.
Problemi di riattivazione
L'hardware del dispositivo fotocamera non deve supportare la riattivazione. Windows non prevede che i dispositivi fotocamera possano riattivare il SoC dallo stato di alimentazione più basso durante lo standby moderno. Molti telefoni cellulari consentono al SoC di riattivarsi dal sonno quando l'utente preme il pulsante della fotocamera. Il pulsante della fotocamera viene considerato da Windows come dispositivo di input utente il cui funzionamento è separato da e indipendentemente dall'integrazione sytem o dalla gestione della potenza del dispositivo fotocamera, del suo sensore e del flash facoltativo.