[RK3288][android11] Adaptarse al control remoto por infrarrojos

La vida está llena de ondas electromagnéticas de varias longitudes de onda. La llamada luz visible (color) es el espectro electromagnético visible para el ojo humano. Su longitud de onda es de 380 ~ 770 nm. Para evitar que la luz emitida por el control remoto cause molestias al ojo humano y reduce la interferencia de fuentes de luz artificial generales, por lo tanto, se selecciona la longitud de onda infrarroja (infrarroja) invisible para el ojo humano.Actualmente, casi todos los emisores de control remoto en la industria usan una longitud de onda de 940nm.
inserte la descripción de la imagen aquí
La aplicación de control remoto por infrarrojos también es un tipo de transmisión de señal inalámbrica.Como la mayoría de las tecnologías de transmisión inalámbrica, para evitar la interferencia de ondas electromagnéticas de la misma longitud de onda en el entorno, una frecuencia portadora (frecuencia portadora) como se muestra en la figura a continuación se agregará a la señal de transmisión. , el rango de la portadora en aplicaciones de control remoto es de 30~60kHz, y 38kHz es la frecuencia portadora más común.
inserte la descripción de la imagen aquí
Actualmente, los protocolos de control remoto por infrarrojos incluyen RC5, SIRCS, Sy, RECS80, Denon, NEC, Motorola, Japanese, SAMSWNG y Daewoo, etc. Rockchip平台只支持 NEC 编码, la mayoría de los electrodomésticos utilizan este protocolo de codificación.


La plataforma RK PWM tiene tres modos de trabajo, modo de referencia, modo de disparo único y modo continuo. El control remoto infrarrojo utiliza el modo de referencia. En este modo, el PWM puede capturar el ancho de los niveles alto y bajo de entrada y generar una interrupción. Después al recibir la interrupción, la CPU pasa a Se lee el registro correspondiente.

1. Consulte el diagrama esquemático para agregar la configuración del kernel IR

inserte la descripción de la imagen aquí

1.1 Agregue la siguiente configuración al árbol de dispositivos en 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 el dispositivo de entrada y encuentre el dispositivo de infrarrojos pwm que acaba de agregar. El controlador se carga normalmente y el siguiente paso es agregar el control remoto de acuerdo con el valor clave.

\> 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. Agregue el botón infrarrojo para informar el valor clave (definido por separado por la plataforma rk)

La plataforma rk puede ver directamente el receptor de infrarrojos, y el comando para abrir el valor clave es el siguiente:

echo 1 > /sys/módulo/rockchip_pwm_remotectl/parameters/code_print

Hay demasiados registros del kernel, puede usar el comando adb (o la impresión del puerto serie) para filtrar y obtener el valor de la clave directamente, USERCODEagregue el rockchip y el código de usuario correspondiente al control remoto dts, y RMC_GETDATAel valor de la clave correspondiente se puede convertir al rk: ingrese el valor de la clave a través 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

Las claves de letras y símbolos son valores clave estándar de Linux, que se pueden kernel/include/dt-bindings/input/linux-event-codes.hver en el archivo.


3. Agregar transformación clave-valor

El valor de la clave estándar de Linux no es el mismo que el valor de la clave estándar de Android y es necesario convertir el archivo para que coincida con la relación correspondiente. El archivo de configuración de conversión intermedia utilizará PWM para que coincida con el archivo de configuración correspondiente al nombre de la etiqueta PWM según el control remoto infrarrojo. Esta depuración utiliza el número pwm3 correspondiente a PWM3: pwm@fdd70030 {, el nombre del archivo de configuración de conversión de clave-valor fdd70030_pwm.kly el archivo de descripción del dispositivo es fdd70030_pwm.idc.

Si no comprende el valor de la clave de Android, puede ver frameworks/base/core/java/android/view/KeyEvent.javael archivo;
puede copiarlo manualmente para una depuración temporal /vendor/usr/keylayouty reiniciarlo para que surta efecto.

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. Compile y construya automáticamente

Necesita copiar fdd70030_pwm.kl y fdd70030_pwm.idc al device/rockchip/commondirectorio. Y agregue reglas de copia en device.mk, se copiará automáticamente en el directorio especificado al compilar.

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

El botón de encendido no tiene efecto durante la depuración.
Teóricamente, después de agregar el código de usuario y el código clave, el sistema necesita usar 重新启动el botón de encendido una vez. (En este momento, después de reiniciar, mire el valor del código clave impreso por el puerto serie y reemplace directamente el valor anterior de powerkey_keycode con el código de etapa u-boot), que puede lograr el efecto de que la tecla de encendido se puede usar por primera vez. momento en que se quema la tecla de encendido.
inserte la descripción de la imagen aquí

Nota:
a) La tecla "OK" es KEY_REPLY.
b) /vendor/usr/keylayout es lo mismo que /system/usr/keylayout.
c) El registro de infrarrojos falló, puede verificar la multiplexación PWM GPIO (iomux).

Supongo que te gusta

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