Android系统 红外遥控器 irda consumerir API调试
.Linux驱动层:
1.文件复制:
把kernel/drivers/irda文件目录复制到对应平台的/kernel/drivers下面
修改/drivers/的Kconfig 加入 source "drivers/irda/Kconfig"
修改/drivers/的Makefile 加入obj-$(CONFIG_IRDA_DC6008) += irda/
2.编译kernel。
3. 测试代码:
在终端下先查看是否有/sys/class/sec/sec_ir,然后输入以下命令看是否会发码出来。
echo "37300,11,67,10,28,10,28,10,27,11,27,11,27,11,67,11,67,11,27,11,68,10,27,11,27,11,27,11,67,11,27,11,1731,11,68,10,28,10,27,11,27,11,27,11,67,11,27,11,27,11,67,11,27,11,67,11,67,11,68,10,27,11,68,10,1653 ">/sys/class/sec/sec_ir/ir_send
这时会发射出遥控码出来。
在init.rc中增加
chmod 777 /sys/class/sec/sec_ir/ir_send
chmod 777 /dev/ircontro
Android 层:(添加硬件hal层)
可以通过导入irda中间层来实现第三方软件。
1.增加硬件层接口
在device/mini210/device_base.mk 中增加如下:
=====================================================
# Irda
PRODUCT_PACKAGES += \
irda.mt6582
=====================================================
复制 irda.h到hardware/libhardware/include里面
复制 hardware/libhardware/modules/irda目录 到hardware/libhardware/include/modules里面
在 hardware/libhardware/modules/Android.mk里面增加
=====================================================
hardware_modules := irda
include $(call all-named-subdir-makefiles,$(hardware_modules))
=====================================================
2.增加service jni层 硬件架构
把com_android_server_IrdaManagerService.cpp 复制到 framework/base/services/jni/ 里面,
并修改framework/base/services/jni/里面的Android.mk
=====================================================
LOCAL_SRC_FILES:= \
com_android_server_IrdaManagerService.cpp =====================================================
在onload.cpp对应的位置 分别增加:
=====================================================
namespace android {
int register_android_server_IrdaManagerService(JNIEnv* env);
};
extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
register_android_server_IrdaManagerService(env);
}
=====================================================
3.增加irda service 层
1)在/frameworks/base/core/java/android/app/ ContextImpl.java 进行修改
=====================================================
import android.hardware.IIrdaManager;
import android.hardware.IrdaManager;
static {
registerService(IRDA_SERVICE, new StaticServiceFetcher() {
public Object createStaticService() {
IBinder b = ServiceManager.getService(IRDA_SERVICE);
IIrdaManager service = IIrdaManager.Stub.asInterface(b);
return new IrdaManager(service);
}});
}
2)在/frameworks/base/core/java/android/content/ Context.java中增加如下
=====================================================
/**
* Use with {@link #getSystemService} to retrieve a
* Use with {@link #getSystemService} to retrieve a
* {@link android.hardware.IrdaManager} for sending IR codes
* with the IR emitter
*
* @see #getSystemService
* @see android.hardware.IrdaManager
*/
public static final String IRDA_SERVICE = "irda";
=====================================================
3)将/frameworks/base/core/java/android/hardware/ IIrdaManager.aidl IrdaManager.java 四个文件复制到 /frameworks/base/core/java/android/hardware/中
4)在/frameworks/base目录,打开Android.mk文件,修改LOCAL_SRC_FILES变量的值,增加 core/java/android/hardware/IIrdaManager.aidl \
两个接口文件。
5)在 frameworks/base/api/current.txt中添加:
=====================================================
public abstract class Context{
…
field public static final java.lang.String IRDA_SERVICE = "irda";
}
=====================================================
6)在 frameworks/base/core/res/AndroidManifest.xml中增加
=====================================================
=====================================================
7)
8)
9)将/frameworks/base/services/java/com/android/server/中的 IrdaManagerService.java加入到/frameworks/base/services/java/com/android/server/中
10)修改此目录的SystemServer文件,加入以下内容:
=====================================================
try {
Slog.i(TAG, "IrdaManager Service");
ServiceManager.addService("irda", new IrdaManagerService(context));
} catch (Throwable e) {
Slog.e(TAG, "Failure starting Irda Service", e);
}
这样就完成了文档的移植。但由于导入了新的API,请先输入指令
make update-api
再输入指令 make
然后生成img烧录系统中,打开logcat 用命令查看service list 是否有irda这个service。 Irda是老的三星遥控器接口,现在很多第三方软件都是用此接口。具体在使用上可能还是会有些问题。 irda接口都没有定义红外学习功能。红外学习功能只能用自己的DecoRemote.apk来测试了。