Guida all'implementazione del backlight da tastiera

Questo documento illustra in dettaglio l'implementazione del protocollo per l'integrazione del controllo backlight dei dispositivi da tastiera che si connettono a un host Windows 11 compatibile. Ciò non include indicazioni su vincoli meccanici, vincoli elettrici o selezione dei componenti per l'hardware del dispositivo da tastiera.

Questa guida illustra solo i semplici backlight della tastiera globale, in cui un singolo livello di luminosità si applica all'intera tastiera. Per le tastiere con illuminazione RGB con zone o per tasto, fare invece riferimento a Illuminazione dinamica .

Il supporto per l'integrazione del backlight da tastiera è disponibile in Windows 11 versione 25H2, build 26200.7922 o successiva.

Implementazione del protocollo della retroilluminazione della tastiera

Per comprendere le informazioni presentate qui, è necessaria una buona comprensione del protocollo HID. Per informazioni sul protocollo HID, vedere le risorse seguenti:

Linee guida per il backlight da tastiera

Raccolta HID richiesta

Le funzionalità relative alla retroilluminazione della tastiera devono essere incluse in una raccolta Consumer HID per retroilluminazione della tastiera (Pagina 0xC, Utilizzo 0x7).

Pulsanti di input

La tabella seguente definisce i pulsanti di input supportati dall'host per i controlli di backlight da tastiera. Questi pulsanti non devono applicare direttamente gli aggiornamenti della luminosità nel dispositivo, ma devono invece rinviare le operazioni di controllo della luminosità all'host. In molti casi, l'host fornirà una risposta tempestiva a un comando di input con un report Imposta livello, facoltativamente regolato in base all'algoritmo di luminosità dell'host. Il dispositivo non deve applicare alcuna modifica temporanea della luminosità in attesa di tale risposta.

I pulsanti di input vengono applicati in base al dispositivo e non si applicano ad alcun dispositivo oltre a quello che emette il report.

Se il dispositivo è connesso a un host che non supporta il controllo della retroilluminazione della tastiera, indicato dall'assenza di un rapporto di output Set Level all'avvio o al momento della connessione, il dispositivo può ripiegare sul controllo locale diretto della luminosità per i tasti di input.

Utilizzi facoltativi
Nome report Descrizione Pagina Documento d'identità
Incremento della luminosità Richiede all'host di aumentare la luminosità della retroilluminazione di un passaggio logico. L'host determina la dimensione del passo, che può variare in base all'intervallo logico e all'algoritmo di luminosità attivo. È consigliabile che i dispositivi che supportano l'incremento della luminosità supportino anche il decremento della luminosità. 0x0C 0x0079
Decremento della luminosità Richiede all'host di ridurre la luminosità della retroilluminazione di un passaggio logico. L'host determina le dimensioni del passaggio, che possono variare in base all'intervallo logico e all'algoritmo di luminosità attivo. È fortemente consigliato che i dispositivi che supportano la diminuzione della luminosità supportino anche l'aumento della luminosità. 0x0C 0x007A
Controllo Attivato/Disattivato (OOC) Richiede all'host di attivare o disattivare l'illuminazione della tastiera. Se si attiva il backlight, l'host determinerà un valore di luminosità diverso da zero appropriato da inviare al dispositivo. La disattivazione del backlight implica una richiesta per l'host di impostare la luce posteriore su zero luminosità. 0x0C 0x007C
Auto Richiede all'host di abilitare o disabilitare la regolazione automatica della luminosità. 0x0C 0x007F
Imposta valore minimo Richiede all'host di impostare il backlight della tastiera sul livello di luminosità logico minimo diverso da zero (in genere 1 nit). Rappresenta la luminosità minima supportata dal dispositivo senza disattivare completamente la luce posteriore. 0x0C 0x007D
Imposta il valore massimo Richiede all'host di impostare il backlight della tastiera sul livello di luminosità massimo logico. 0x0C 0x007E
Livello successivo Richiede all'host di impostare la luminosità della tastiera al livello di luminosità successivo più intenso, con passaggio al livello più basso se il livello di luminosità corrente raggiunge o supera il livello massimo suggerito. Se il Report delle Funzionalità di Suggerimenti al Livello non è implementato, questo pulsante viene ignorato. 0x0C 0x0515
Livello precedente Richiede all'host di impostare la luminosità della tastiera al livello inferiore successivo, passando al livello più alto se il livello di luminosità corrente è pari o inferiore al livello più basso. Se il report della funzionalità di suggerimenti di livello non è implementato, questo pulsante viene ignorato. 0x0C 0x0516

Imposta il livello per il rapporto di output

L'host invierà questo report per impostare o modificare il livello di luminosità del backlight nel dispositivo. Il dispositivo può rilevare un host con retroilluminazione della tastiera ricevendo questo rapporto all'avvio del sistema o quando si connette all'host.

Il report di output Set Level (Imposta livello) deve definire un intervallo logico di valori del livello di luminosità su una scala lineare, con la relativa unità HID dichiarata come nits. L'host usa questo intervallo logico per determinare i possibili livelli di luminosità supportati dal dispositivo; non richiede che il dispositivo venga calibrato per generare valori di luminanza esatti. Tutti gli altri comandi di backlight della tastiera e le operazioni host faranno riferimento a questo intervallo logico.

Se il valore minimo logico è uguale o maggiore del valore massimo logico, il dispositivo viene considerato non conforme e non verrà aperto per il controllo backlight dall'host.

Un valore Set Level pari a 0 indica al dispositivo di disattivare il backlight. È consigliabile che il dispositivo usi un minimo logico pari a 0 (nessuna luminosità) per questo report.

Utilizzi obbligatori
Nome report Descrizione Pagina Documento d'identità
Imposta livello Indica al dispositivo di regolare la luminosità della retroilluminazione della tastiera al valore di nit logico specificato. 0x0C 0x007B

Rapporto sulla funzionalità di suggerimento del livello di retroilluminazione della tastiera

Questo report è facoltativo. Il dispositivo può scegliere di supportare una serie di almeno due set di impostazioni di luminosità che desidera scorrere quando l'utente preme i pulsanti Livello successivo o Livello precedente. L'host eseguirà una query per questi set di impostazioni all'avvio del sistema o quando il dispositivo si connette o si riconnette all'host. I preset devono rientrare nell'intervallo logico specificato nel report di output Set Level. Un valore di suggerimento pari a 0 è valido e indica lo stato di backlight spento come impostazione predefinita.

Il report della funzionalità Suggerimenti livello viene ignorato se il dispositivo non implementa né il pulsante di input Livello successivo né il pulsante di input Livello precedente.

Utilizzi facoltativi
Nome report Descrizione Pagina Documento d'identità
Suggerimento sul livello di backlight della tastiera Indica un livello di luminosità preimpostato suggerito che deve essere considerato quando l'host gestisce i pulsanti Livello successivo o Livello precedente. 0x07 0x0517

Rapporto sulla funzionalità di impostazione del livello di retroilluminazione della tastiera

Questo report è facoltativo. Il dispositivo può scegliere di implementare questo report per segnalare all'host un livello di luminosità iniziale suggerito all'avvio o all'ora di connessione, ad esempio se la backlight è stata modificata dall'utente prima dell'avvio del sistema o collegare il dispositivo. L'host eseguirà una query per questo report all'avvio del sistema o quando il dispositivo si connette o si riconnette all'host, eventualmente scegliendo di sovrascrivere il livello suggerito con un proprio valore. Il valore suggerito 0 è valido e indica che il backlight è disattivato. Se il valore suggerito non rientra nell'intervallo logico del report di output "Imposta Livello", il report viene ignorato. Un valore suggerito che non corrisponde ad alcuna voce nel report della funzionalità Suggerimenti livello è valido, purché rientri nell'intervallo logico.

L'intervallo logico per questo report deve rientrare nell'intervallo logico per il rapporto di uscita del livello impostato.

Utilizzi facoltativi
Nome report Descrizione Pagina Documento d'identità
Imposta livello Informa l'host sul livello di luminosità corrente del backlight come suggerimento per lo stato iniziale del dispositivo nei suoi algoritmi di luminosità. 0x0C 0x007B

Comportamento dell'host backlight da tastiera

Dimming in modalità Risparmio energetico

Windows supporta l'attenuazione automatica della tastiera quando è abilitata la modalità Risparmio energia. Nei dispositivi compatibili, questa funzionalità può essere attivata o disattivata in Impostazioni>Sistema>Energia e batteria>risparmio energetico>Ridurre la luminosità della tastiera quando si usa il risparmio energetico o al collegamento seguente: Energia e batteria.

Personalizzazione

Questa funzionalità può essere configurata nel Registro di sistema come descritto nella tabella seguente. Per impostazione predefinita, la funzionalità applica un moltiplicatore di 70% alla luminosità del backlight della tastiera quando il risparmio energia è abilitato.

Chiave di Registro Nome Tipo Unità
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Lighting\Backlight BacklightRisparmioEnergiaAbilitato REG_DWORD Booleano (1 o 0)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Lighting\Backlight BacklightEnergySaverMultiplier REG_DWORD Percentuale (0-100)

È anche possibile configurare la funzionalità usando Windows Unattended Setup o il provisioning di runtime.

Retroilluminazione tastiera regolazione automatica della luminosità

Nei dispositivi come i portatili che contengono sia un backlight da tastiera che un sensore di luce Ambient light, Windows supporta la regolazione automatica della luminosità del backlight da tastiera. Questa funzionalità è supportata anche per le tastiere esterne quando sono collegate ai dispositivi con sensori di luce ambientale.

La retroilluminazione della tastiera Autobrightness è distinta dalla luminosità adattiva per gli schermi, ma concettualmente simile nell'implementazione.

Nei dispositivi compatibili, questa funzionalità può essere attivata o disattivata in Impostazioni>Bluetooth e dispositivi>Tastiera>Regolare automaticamente la luminosità della tastiera> quando l'illuminazione cambia o al tasto di scelta rapida seguente: Tastiera.

Curva di risposta raggruppata alla luce ambientale

La Retroilluminazione della tastiera Autobrightness utilizza il concetto di curva di risposta alla luce ambientale segmentata (ALR), come descritto in Luminosità adattiva.

Le mappature dei valori predefiniti tra classi di lux e percentuali di luminosità della tastiera sono indicate nella tabella seguente. La percentuale del bucket si riferisce a una proporzione del valore massimo logico del report di output Imposta Valore e verrà utilizzata quando il livello di luce ambientale si trova all'interno dell'intervallo del bucket.

Tutti i bucket nella curva ALR devono essere contigui o sovrapposti. Spazi vuoti tra i bucket non sono consentiti. Ogni bucket deve avere un valore minimo di lux rigorosamente inferiore al valore massimo di lux. Se la lettura della luce ambientale scende al di sotto del lux minimo del bucket più basso, viene usata la percentuale del bucket più basso. Se supera il massimo lux del bucket più alto, viene usata la percentuale del bucket più alto.

Bucket Min Lux Max Lux Percentuale
1 0 6 35
2 5 14 52
3 12 32 70
4 30 45 88
5 40 100 100
6 95 110 88
7 105 160 70
8 155 205 52
9 200 300 0

Quando sono collegate più tastiere backlit, viene usata la stessa curva ALR per tutte le tastiere, con le percentuali risultanti applicate a ogni dispositivo in base all'intervallo di luminosità logica del dispositivo.

Personalizzazione

I valori di abilitazione della luminosità automatica e della curva ALR possono essere configurati nel Registro di sistema come descritto nella tabella seguente. Possono anche essere configurati usando Windows Installazione non presidiata o il provisioning di Runtime.

Chiave di Registro Nome Tipo Unità
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Lighting\Backlight AbilitaAutobrightnessRetroilluminazioneSuddivisa REG_DWORD Booleano (1 o 0)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Lighting\Backlight MappaturaDiAutoluminositàRetroilluminazioneBucket REG_SZ Stringa costituita da una o più triple delimitate da virgole nel formato <minlux>:<maxlux>:<percentage>. Ogni triplo corrisponde a un bucket nella curva ALR. Se la curva ALR personalizzata ha spazi vuoti, contiene zero voci o contiene un bucket in cui minlux ≥ maxluxverrà usata la curva ALR predefinita.

Override manuale della luminosità automatica

Se viene premuto un pulsante di input mentre è abilitata l'illuminazione automatica della tastiera, verrà avviato un override manuale temporaneo dell'algoritmo di regolazione automatica della luminosità. L'override genera un singolo segmento aggiuntivo applicato sopra la curva suddivisa in intervalli, in origine nella lettura corrente della luce ambientale, con valori di lux minimo e massimo generati a una distanza determinata sopra o sotto la lettura corrente basata su una percentuale di tale lettura.

Le associazioni dei valori predefiniti tra i bucket di lux e le costanti dell'intervallo di override manuale sono illustrate nella tabella sottostante. Le voci nella tabella di ricerca devono avere intervalli di lux contigui e non sovrapposti.

Bucket Min Lux Max Lux Fattore limite override inferiore Fattore vincolo superiore dell'override
1 0 20 1.00 1.00
2 20 40 0.70 0.60
3 40 150 0.60 0.60
4 150 600 0,50 0,50
5 600 1000 0.40 0.40
6 1000 4000 0.30 0.25
7 4000 10000 0,20 0,20
8 10000 30000 0.15 0,10
9 30000 100000 0,10 0,10

Per un esempio di calcolo dell'intervallo di override, prendere in considerazione un utente che preme un pulsante di input quando la lettura della luce ambientale più recente è di 120 lux. La voce corrispondente della tabella di ricerca è bucket 3, perché 120 lux cade tra 40 e 150 lux. Il contenitore verrà creato usando una soglia inferiore del 60% rispetto alla lettura corrente. Con R=120 e A=0,6, la soglia inferiore è 120(1 - 0,6) = 48 lux. La soglia superiore è anche 60% al di sopra della lettura corrente. Anche in questo caso, con R=120 e B=0,6, la soglia superiore è 120(1 + 0,6) = 192 lux. L'override manuale verrà quindi applicato mentre il livello di luce ambientale rimane compreso nell'intervallo [48, 192].

Una volta attivato, viene utilizzata la percentuale di luminosità del secchio di sovrascrittura manuale fino a quando:

  • la lettura della luce ambientale attraversa i limiti del bucket di override, a quel punto l'override viene annullato, l'intervallo di override viene ignorato e il controllo automatico della luminosità riprende utilizzando la curva ALR suddivisa in bucket, oppure
  • un altro pulsante di ingresso viene ricevuto dal dispositivo, il che richiede all'host di regolare la percentuale di luminosità e ricalcolare l'intervallo di override manuale in base alla lettura più recente della luce ambientale.

Personalizzazione

La tabella di ricerca di override manuale può essere configurata nel Registro di sistema come descritto nella tabella seguente. Può anche essere configurato usando Installazione automatica di Windows o tramite provisioning in fase di esecuzione.

Chiave di Registro Nome Tipo Unità
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Lighting\Backlight Override manuale della luminosità automatica del display REG_SZ Stringa costituita da una o più tuple delimitate da virgole nel formato <minlux>:<maxlux>:<lowerboundfactor>:<upperboundfactor>. Ogni tupla da 4 rappresenta una voce nella tabella di ricerca. Se la tabella di ricerca personalizzata ha spazi vuoti, contiene zero voci, contiene bucket sovrapposti o contiene qualsiasi bucket in cui minlux ≥ maxluxverrà usata la tabella di ricerca predefinita.

Descrittori di report HID di esempio

Descrittore di retroilluminazione della tastiera di esempio

Il descrittore seguente supporta tutti gli utilizzi obbligatori e facoltativi. Dichiara il supporto per otto pulsanti di input retroilluminati della tastiera.

Tutti gli intervalli logici dei report delle funzionalità Imposta livello e Suggerimenti livello devono rientrare nell'intervallo logico del report di output Imposta livello obbligatorio.

0x05, 0x0C,                      // UsagePage(Consumer[0x000C])
0x09, 0x07,                      // UsageId(Keyboard Backlight[0x0007])
0xA1, 0x01,                      // Collection(Application)
0x85, 0x01,                      //     ReportId(1)
0x09, 0x79,                      //     UsageId(Keyboard Brightness Increment[0x0079])
0x09, 0x7A,                      //     UsageId(Keyboard Brightness Decrement[0x007A])
0x09, 0x7C,                      //     UsageId(Keyboard Backlight OOC[0x007C])
0x09, 0x7D,                      //     UsageId(Keyboard Backlight Set Minimum[0x007D])
0x09, 0x7E,                      //     UsageId(Keyboard Backlight Set Maximum[0x007E])
0x09, 0x7F,                      //     UsageId(Keyboard Backlight Auto[0x007F])
0x0A, 0x15, 0x05,                //     UsageId(Keyboard Brightness Next[0x0515])
0x0A, 0x16, 0x05,                //     UsageId(Keyboard Brightness Previous[0x0516])
0x15, 0x00,                      //     LogicalMinimum(0)
0x25, 0x01,                      //     LogicalMaximum(1)
0x95, 0x08,                      //     ReportCount(8)
0x75, 0x01,                      //     ReportSize(1)
0x81, 0x06,                      //     Input(Data, Variable, Relative, NoWrap, Linear, PreferredState, NoNullPosition, BitField)
0x0A, 0x17, 0x05,                //     UsageId(Keyboard Backlight Level Suggestion[0x0517])
0x67, 0xE1, 0x00, 0x00, 0x01,    //     Unit('nits', SiLinear, Centimeter:-2, Candela:1)
0x55, 0x04,                      //     UnitExponent(10,000)
0x26, 0xFF, 0x00,                //     LogicalMaximum(255)
0x95, 0x04,                      //     ReportCount(4)
0x75, 0x08,                      //     ReportSize(8)
0xB1, 0x03,                      //     Feature(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, NonVolatile, BitField)
0x85, 0x02,                      //     ReportId(2)
0x09, 0x7B,                      //     UsageId(Keyboard Backlight Set Level[0x007B])
0x95, 0x01,                      //     ReportCount(1)
0xB1, 0x03,                      //     Feature(Constant, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, NonVolatile, BitField)
0x85, 0x01,                      //     ReportId(1)
0x09, 0x7B,                      //     UsageId(Keyboard Backlight Set Level[0x007B])
0x91, 0x02,                      //     Output(Data, Variable, Absolute, NoWrap, Linear, PreferredState, NoNullPosition, NonVolatile, BitField)
0xC0,                            // EndCollection()

Il descrittore precedente è stato generato tramite il file Waratah seguente:

[[unit]]
name = 'meter'
centimeter = [100.0, 1.0]

[[unit]]
name = 'nits'
candela = [1.0, 1.0]
meter = [1.0, -2.0]

[[usagePage]]
name = 'Consumer'

    [[usagePage.usage]]
    id = 0x07
    name = 'Keyboard Backlight'
    types = ['CA']

    [[usagePage.usage]]
    id = 0x515
    name = 'Keyboard Brightness Next'
    types = ['OSC']

    [[usagePage.usage]]
    id = 0x516
    name = 'Keyboard Brightness Previous'
    types = ['OSC']

    [[usagePage.usage]]
    id = 0x517
    name = 'Keyboard Backlight Level Suggestion'
    types = ['SV']

[[applicationCollection]]
usage = ['Consumer', 'Keyboard Backlight']

    [[applicationCollection.inputReport]]

        [[applicationCollection.inputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Brightness Increment']
        logicalValueRange = [0, 1]
        reportFlags = ['Relative', 'PreferredState']

        [[applicationCollection.inputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Brightness Decrement']
        logicalValueRange = [0, 1]
        reportFlags = ['Relative', 'PreferredState']

        [[applicationCollection.inputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Backlight OOC']
        logicalValueRange = [0, 1]
        reportFlags = ['Relative', 'PreferredState']

        [[applicationCollection.inputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Backlight Set Minimum']
        logicalValueRange = [0, 1]
        reportFlags = ['Relative', 'PreferredState']

        [[applicationCollection.inputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Backlight Set Maximum']
        logicalValueRange = [0, 1]
        reportFlags = ['Relative', 'PreferredState']

        [[applicationCollection.inputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Backlight Auto']
        logicalValueRange = [0, 1]
        reportFlags = ['Relative', 'PreferredState']

        [[applicationCollection.inputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Brightness Next']
        logicalValueRange = [0, 1]
        reportFlags = ['Relative', 'PreferredState']

        [[applicationCollection.inputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Brightness Previous']
        logicalValueRange = [0, 1]
        reportFlags = ['Relative', 'PreferredState']

    # Keyboard provided brightness level suggestions for host.
    # Here, the device suggests 4 brightness levels, which the host is free to override as it sees fit.
    [[applicationCollection.featureReport]]

        [[applicationCollection.featureReport.variableItem]]
        usage = ['Consumer', 'Keyboard Backlight Level Suggestion']
        sizeInBits = 8
        logicalValueRange = 'maxUnsignedSizeRange'
        unit = 'nits'
        reportFlags = ['constant']
        count = 4

    # Keyboard reports its last used brightness level as a hint to the host during initialization.
    [[applicationCollection.featureReport]]

        [[applicationCollection.featureReport.variableItem]]
        usage = ['Consumer', 'Keyboard Backlight Set Level']
        sizeInBits = 8
        logicalValueRange = 'maxUnsignedSizeRange'
        unit = 'nits'
        reportFlags = ['constant']

    # Host control of the keyboard brightness level.
    # Device has been previously calibrated to understand what LED 'power level' corresponds to emitted nits.
    [[applicationCollection.outputReport]]

        [[applicationCollection.outputReport.variableItem]]
        usage = ['Consumer', 'Keyboard Backlight Set Level']
        sizeInBits = 8
        logicalValueRange = 'maxUnsignedSizeRange'
        unit = 'nits'