1.让上层知道系统支持红外功能
红外的hal代码路径
并没有该库,选择安装该库即可。
在device文件下的mk文件中加入
PRODUCT_PACKAGES += \
consumerir.default
同时在mk文件中加入
红外的hal代码路径
hardware/libhardware/modules/consumerir/最终生成consumerir.default.so,但system文件系统中
并没有该库,选择安装该库即可。
在device文件下的mk文件中加入
PRODUCT_PACKAGES += \
consumerir.default
同时在mk文件中加入
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.consumerir.xml:system/etc/permissions/android.hardware.consumerir.xml
应用在打开红外设备的时候会申请红外权限,这个就是红外权限的文件,没有应用会出错。
选择合适的红外芯片,并移植好驱动后,就可以通过第三方的应用控制电器了。另外有些
红外芯片支持学习功能,但Android并没有相应的接口,可以改Android代码,然后将应
源码放在Android源码下编译。如果要做android-studio下编译(android-api不能直接
访问新方法),可采用getDeclaredMethod这个方法来获取Android系统新添加的方法。
红外framework层代码路径
frameworks/base/services/core/java/com/android/server/ConsumerIrService.java frameworks/base/core/java/android/hardware/IConsumerIrService.aidl frameworks/base/services/core/jni/com_android_server_ConsumerIrService.cpp
驱动的移植
红外的电路选择,拿小米的开源代码来分析下,使用过gpio,pwm,芯片来控制红外的发射。
如Redmi 4X,电路类似下图
gpio-leds { compatible = "gpio-leds"; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&gpio_led_off>; infred { gpios = <&tlmm 45 0>; label = "infrared"; linux,default-trigger = "infra-red"; default-state = "off"; retain-state-suspended; }; };
驱动https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/santoni-n-oss/drivers/leds/leds-gpio.c
Redmi Note 4X Standard
pwm_ir { compatible = "pwm-ir"; pwms = <&pmi8950_pwm 0 0>; reg-id = "vdd"; vdd-supply = <&pm8953_l8>; };
驱动https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/mido-n-oss/drivers/media/rc/pwm-ir.c
&spi_6 { status = "ok"; peel_ir@0 { compatible = "peel_ir"; reg = <0x0>; spi-max-frequency = <19200000>; vdd-supply = <&pm8953_l8>; peel_ir,reg-id = "vdd"; peel_ir,lr-gpio = <73>; peel_ir,lr-gpio-valid = <0>; peel_ir,spi-bpw = <32>; peel_ir,spi-clk-speed = <960000>; peel_ir,spi-mode = <0>; peel_ir,peel-field = <2345>; status = "ok"; }; };驱动 https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/tiffany-n-oss/drivers/media/rc/peelir.c