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.
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.
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
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, USERCODE
agregue el rockchip y el código de usuario correspondiente al control remoto dts, y RMC_GETDATA
el 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.h
ver 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.kl
y 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.java
el archivo;
puede copiarlo manualmente para una depuración temporal/vendor/usr/keylayout
y 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/common
directorio. 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.
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).