[RK3288][android11] Adaptar para controle remoto infravermelho

A vida é cheia de ondas eletromagnéticas de vários comprimentos de onda. A chamada luz visível (cor) é o espectro eletromagnético visível ao olho humano. Seu comprimento de onda é de 380 a 770 nm. Para evitar que a luz emitida pelo controle remoto cause desconforto para o olho humano e reduzir a interferência de fontes de luz artificiais gerais, portanto, o comprimento de onda infravermelho (infravermelho) invisível ao olho humano é selecionado. Atualmente, quase todos os emissores de controle remoto na indústria usam um comprimento de onda de 940 nm.
insira a descrição da imagem aqui
A aplicação do controle remoto infravermelho também é um tipo de transmissão de sinal sem fio. Como a maioria das tecnologias de transmissão sem fio, para evitar a interferência de ondas eletromagnéticas do mesmo comprimento de onda no ambiente, uma frequência portadora (frequência portadora) conforme mostrado na figura abaixo será adicionado ao sinal de transmissão. , a faixa da portadora em aplicações de controle remoto é de 30~60kHz e 38kHz é a frequência portadora mais comum.
insira a descrição da imagem aqui
Atualmente, os protocolos de controle remoto infravermelho incluem RC5, SIRCS, Sy, RECS80, Denon, NEC, Motorola, japonês, SAMSWNG e Daewoo, etc. Rockchip平台只支持 NEC 编码, a maioria dos aparelhos elétricos domésticos usa esse protocolo de codificação.


A plataforma RK PWM tem três modos de trabalho, modo de referência, modo one-shot e modo contínuo. O controle remoto infravermelho usa o modo de referência. Neste modo, o PWM pode capturar a largura dos níveis altos e baixos de entrada e gerar uma interrupção. Depois recebendo a interrupção, a CPU vai para O registrador correspondente é lido.

1. Consulte o diagrama esquemático para adicionar a configuração do kernel IR

insira a descrição da imagem aqui

1.1 Adicione a seguinte configuração à árvore de dispositivos em uso:

&pwm3 {
    
    
    status = "okay";

    compatible = "rockchip,remotectl-pwm";
    remote_pwm_id = <3>;
    handle_cpu_id = <1>;
    remote_support_psci = <0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pwm3_pins>;

    ir_key1 {
    
    
        rockchip,usercode = <0x4040>;
        rockchip,key_table =
            <0xf2    KEY_REPLY>,
            <0xba    KEY_BACK>,
            <0xf4    KEY_UP>,
            <0xf1    KEY_DOWN>,
            <0xef    KEY_LEFT>,
            <0xee    KEY_RIGHT>,
            <0xbd    KEY_HOME>,
            <0xea    KEY_VOLUMEUP>,
            <0xe3    KEY_VOLUMEDOWN>,
            <0xe2    KEY_SEARCH>,
            <0xb2    KEY_POWER>,
            <0xbc    KEY_MUTE>,
            <0xec    KEY_MENU>,
            <0xbf    0x190>,
            <0xe0    0x191>,
            <0xe1    0x192>,
            <0xe9    183>,
            <0xe6    248>,
            <0xe8    185>,
            <0xe7    186>,
            <0xf0    388>,
            <0xbe    0x175>;
    };
......
};

1.2 Verifique o dispositivo de entrada e encontre o dispositivo de infravermelho pwm recém-adicionado. O driver é carregado normalmente, e o próximo passo é adicionar o controle remoto de acordo com o valor da chave.

\> adb shell
rk3568_r:/ # getevent
add device 1: /dev/input/event3
  name:     "Logitech USB Optical Mouse"
add device 2: /dev/input/event2
  name:     "WDR USB Camera: WDR USB Camera"
add device 3: /dev/input/event0
  name:     "fdd70030.pwm"
add device 4: /dev/input/event1
  name:     "rk805 pwrkey"
add device 5: /dev/input/event4
  name:     "adc-keys"
add device 6: /dev/input/event5
  name:     "rk-headset"

2. Adicione o botão infravermelho para informar o valor da chave (definido separadamente pela plataforma rk)

A plataforma rk pode visualizar diretamente o receptor infravermelho, e o comando para abrir o valor da chave é o seguinte:

echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print

Existem muitos logs do kernel, você pode usar o comando adb (ou impressão da porta serial) para filtrar e obter o valor da chave diretamente, USERCODEadicionar o rockchip e o código do usuário correspondente ao controle remoto dts e RMC_GETDATAo valor da chave correspondente pode ser convertido para o valor da chave rk-input por meio de rockchip, key_table.

adb root;adb shell
# cat /dev/kmsg | grep USERCODE -A 2
6,1136,469064745,-;USERCODE=0x4040
6,1137,469091760,-;RMC_GETDATA=b2
6,1138,482889791,-;USERCODE=0x4040
6,1139,482916765,-;RMC_GETDATA=b4

As chaves de letras e símbolos são valores de chave padrão do linux, que podem kernel/include/dt-bindings/input/linux-event-codes.hser visualizados no arquivo.


3. Adicionar transformação de valor-chave

O valor da chave padrão do Linux não é igual ao valor da chave padrão do Android e é necessário converter o arquivo para corresponder ao relacionamento correspondente. O arquivo de configuração de conversão intermediária usará PWM para corresponder ao arquivo de configuração correspondente ao nome da etiqueta PWM de acordo com o controle remoto infravermelho. Essa depuração usa o número pwm3 correspondente a PWM3: pwm@fdd70030 {, o nome do arquivo de configuração de conversão de valor-chave fdd70030_pwm.kle o arquivo de descrição do dispositivo é fdd70030_pwm.idc.

Se você não entender o valor da chave do Android, poderá visualizar frameworks/base/core/java/android/view/KeyEvent.javao arquivo;
você pode copiá-lo manualmente para depuração temporária /vendor/usr/keylayoute reiniciá-lo para entrar em vigor.

fdd70030_pwm.idc

device.internal = 1 #是否为内部设备
audio.mic = 0 #是否带mic

dd70030_pwm.kl

key 116   POWER
key 102   HOME
key 139   MENU
key 113   VOLUME_MUTE

key 115   VOLUME_UP
key 114   VOLUME_DOWN
key 158   BACK

key 232   DPAD_CENTER
key 103   DPAD_UP
key 108   DPAD_DOWN
key 105   DPAD_LEFT
key 106   DPAD_RIGHT
key 240   PROFILE_SWITCH

key 15    TAB
key 104   PAGE_UP
key 109   PAGE_DOWN

key 2     1
key 3     2
key 4     3
key 5     4
key 6     5
key 7     6
key 8     7
key 9     8
key 10    9
key 11    0
key 52    PERIOD
key 111   DEL

key 119   MEDIA_PAUSE
key 207   MEDIA_PLAY

key 418   F3
key 419   F4

4. Compilar e construir automaticamente

Precisa copiar fdd70030_pwm.kl e fdd70030_pwm.idc para device/rockchip/commono diretório. E adicione regras de cópia em device.mk, ele será copiado automaticamente para o diretório especificado durante a compilação.

PRODUCT_COPY_FILES += \
    device/rockchip/common/fdd70030_pwm.kl:system/usr/keylayout/fdd70030_pwm.kl \

O botão liga/desliga não tem efeito durante a depuração.
Teoricamente, depois que o código de usuário e o código de acesso são adicionados, o sistema precisa usar 重新启动o botão liga/desliga uma vez. (Neste momento, após a reinicialização, observe o valor do código-chave impresso pela porta serial e substitua diretamente o valor powerkey_keycode anterior pelo código do estágio u-boot), que pode obter o efeito de que a tecla liga / desliga pode ser usada pela primeira vez hora em que a chave de energia é queimada.
insira a descrição da imagem aqui

Nota:
a) A tecla "OK" é KEY_REPLY.
b) /vendor/usr/keylayout é o mesmo que /system/usr/keylayout.
c) O registro infravermelho falhou, você pode verificar a multiplexação PWM GPIO (iomux).

Acho que você gosta

Origin blog.csdn.net/weixin_45639314/article/details/131127607
Recomendado
Clasificación