Android红外遥控器移植

1.编译hal层代码
              红外的hal代码路径

hardware/libhardware/modules/consumerir/

最终生成consumerir.default.so,但system文件系统中并没有该库,选择安装该库即可。
在device文件下的mk文件中加入
PRODUCT_PACKAGES += \
consumerir.default

在Andoird8.0以后的版本,libhardware中有部分代码集成在hardware/interfaces/ir,可以单独编译文件夹,将相应的库进行安装,如

PRODUCT_PACKAGES += [email protected] \
		    [email protected] 、
                    consumerir.default

    
        android.hardware.ir
	hwbinder
        1.0
        
        	IIr
            	default
        
    

Android红外遥控器移植_第1张图片

Android红外遥控器移植_第2张图片

 如果ir的hal层打开失败,会报如下错误。

04-15 10:08:47.061  2089  2089 I SystemServer: StartConsumerIrService
04-15 10:08:47.062   242   242 W hwservicemanager: getTransport: Cannot find entry [email protected]::IConsumerIr/default in either framework or device manifest.
04-15 10:08:47.063  2089  2089 E System  : ******************************************
04-15 10:08:47.064  2089  2089 E System  : ************ Failure starting core service
04-15 10:08:47.064  2089  2089 E System  : java.lang.RuntimeException: FEATURE_CONSUMER_IR present, but no IR HAL loaded!
04-15 10:08:47.064  2089  2089 E System  :     at com.android.server.ConsumerIrService.<init>(ConsumerIrService.java:51)
04-15 10:08:47.064  2089  2089 E System  :     at com.android.server.SystemServer.startOtherServices(SystemServer.java:874)
04-15 10:08:47.064  2089  2089 E System  :     at com.android.server.SystemServer.run(SystemServer.java:446)
04-15 10:08:47.064  2089  2089 E System  :     at com.android.server.SystemServer.main(SystemServer.java:309)
04-15 10:08:47.064  2089  2089 E System  :     at java.lang.reflect.Method.invoke(Native Method)
04-15 10:08:47.064  2089  2089 E System  :     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:504)



2.让系统支持红外功能

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.consumerir.xml:system/etc/permissions/android.hardware.consumerir.xml

更高版本的Android

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.consumerir.xml:vendor/etc/permission/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/services/core/jni/com_android_server_ConsumerIrService.cpp

frameworks/base/services/core/jni/com_android_server_ConsumerIrService.cpp

3.红外驱动移植

         手机红外硬件方案介绍https://blog.csdn.net/mike8825/article/details/80955992

你可能感兴趣的:(IR)