Android红外遥控器移植

本文介绍了如何在Android系统中实现红外功能,包括编译HAL层代码、使系统支持红外功能及红外驱动移植等步骤。重点讲解了红外HAL层代码的位置、编译方法以及在不同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 += android.hardware.ir@1.0-service \
		    android.hardware.ir@1.0-impl 、
                    consumerir.default

    <hal format="hidl" optional="true">
        <name>android.hardware.ir</name>
	<transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
        	<name>IIr</name>
            	<instance>default</instance>
        </interface>
    </hal>

 如果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 android.hardware.ir@1.0::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.&lt;init&gt;(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.youkuaiyun.com/mike8825/article/details/80955992

<think>好的,我现在需要帮助用户解决如何将红外遥控编码移植到机智云平台的问题。首先,我需要理解用户的需求。他们可能有一个现有的红外遥控系统,现在希望将其集成到机智云IoT平台,以便通过云进行远程控制。用户可能需要方法、教程、示例代码和相关文档的指导。 首先,我应该回顾机智云平台的基本架构和接入流程。机智云通常使用GAgent作为联网模块,设备需要通过Wi-Fi、NB-IoT等连接到云端。用户需要将红外编码数据上传到云端,并通过APP或云API进行控制。 接下来,用户提到的红外遥控编码,可能涉及红外信号的采集、编码格式解析(比如NEC、RC5等)、存储以及通过机智云协议传输。这里的关键步骤包括: 1. **红外信号采集与解码**:需要使用红外接收模块(如VS1838B)和微控制器(如STM32)捕获红外信号,并解码成二进制数据。常见的库如IRremote可能有用,但需要适配硬件。 2. **数据存储与管理**:将解码后的红外编码存储在设备的非易失性存储器中,可能需要建立数据库或索引以便调用。 3. **机智云协议集成**:根据机智云的接入协议(可能是自定义的JSON数据点),将红外编码封装成符合协议的数据格式,通过GAgent上传和接收指令。 4. **云端配置**:在机智云开发者中心创建产品,定义数据点(如红外编码的发送、存储、删除等操作),生成APP SDK,并配置设备联动逻辑。 5. **设备端代码开发**:编写微控制器的固件,处理红外信号的收发,并与GAgent模块通信,实现与云端的同步。 可能的难点包括红外编码的协议适配、数据点定义的正确性、以及网络通信的稳定性。需要确保编码数据在传输过程中不被截断或篡改,同时处理可能的网络延迟。 用户可能需要示例代码,比如如何通过串口发送数据到GAgent,或者如何处理云端下发的控制指令。此外,文档方面,机智云官方提供的接入文档、数据点定义指南、以及GAgent的AT指令集都是关键参考资料。 还要考虑用户可能的开发环境,比如使用的MCU型号、是否已有红外解码库、是否需要OTA升级支持等。如果用户遇到具体问题,比如数据点无法正确解析,可能需要检查数据格式是否符合机智云的要求,或者检查网络模块的固件版本是否兼容。 最后,生成相关问题需要考虑用户在集成过程中可能遇到的后续问题,比如调试方法、性能优化、兼容性处理等,以及如何扩展功能,比如支持更多红外设备或与其他智能家居平台联动。</think>### 将红外遥控编码集成到机智云 IoT 平台的方法 #### 1. **红外编码采集与解码** - **硬件准备**:使用红外接收模块(如VS1838B)和微控制器(如STM32)捕获原始红外信号,通过解码库(如`IRremote`)将其转换为二进制编码[^1]。 - **示例代码片段**: ```c #include <IRremote.h> IRrecv irrecv(RECV_PIN); decode_results results; void setup() { irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); // 输出十六进制编码 irrecv.resume(); } } ``` #### 2. **机智云协议对接** - **数据点定义**:在机智云开发者中心创建产品,定义数据点(如`红外编码`为字符串类型,`开关`为布尔型),生成对应的SDK[^2]。 - **数据传输示例**(JSON格式): ```json { "data": { "irda_code": "FF00FF", "power": true } } ``` #### 3. **设备端代码开发** - **GAgent通信**:通过串口或SPI与GAgent模块交互,发送红外编码数据。 - **关键代码逻辑**(伪代码): ```c void send_to_gizwins(char *irda_code) { String json = "{\"irda_code\":\"" + String(irda_code) + "\"}"; gizwins_send(json.c_str()); // 通过GAgent上传数据 } ``` #### 4. **云端与APP配置** - **规则引擎**:在机智云平台配置自动化规则,例如APP发送指令后触发红外编码下发。 - **APP SDK集成**:使用自动生成的代码嵌入到Android/iOS应用,实现用户交互界面。 #### 5. **调试与验证** - **日志分析**:通过机智云的设备日志功能追踪数据流,确保编码正确传输。 - **物理测试**:使用红外发射模块验证云端下发的编码是否能控制目标设备。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值