Android红外移植

1.让上层知道系统支持红外功能
红外的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,电路类似下图


https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/santoni-n-oss/arch/arm/boot/dts/qcom/msm8917-pmi8937-qrd-sku5_S88503.dtsi

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

https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/mido-n-oss/arch/arm/boot/dts/qcom/msm8953-qrd.dtsi

   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


Xiaomi5X, Redmi 5Plus

https://github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/tiffany-n-oss/arch/arm/boot/dts/qcom/msm8953-qrd.dtsi

&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

猜你喜欢

转载自blog.csdn.net/mike8825/article/details/79670891