Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(10):其它

来源:互联网 发布:java能写人工智能吗 编辑:程序博客网 时间:2024/06/04 19:45

本篇是此系列文章的最后一篇。

一、Power

官方rom里如果有system\vendor\lib\hw\power.qcom.so
则可以加到proprietary-blobs.txt
其实同版本适配时,官方rom里的多数lib都可以替换到编译出来的msm-aosp里

二、拔电池掉时间问题

CM系统的时间服务只要在BoardConfig.mk里加一个语句BOARD_USES_QC_TIME_SERVICES := true就行了,然后提取官方的lib/libtime_genoff.so来用就搞定了
而msm-aosp则麻烦多了,它没有专门的配置项和代码
你得先用厨房工具合并odex,把官方rom的TimeService.apk提取出来用,并放到device/pantech/a870/etc文件夹
并在etc文件夹下新建一个Android.mk,内容如下

LOCAL_PATH:= $(call my-dir)include \$(CLEAR_VARS)LOCAL_MODULE := TimeServiceLOCAL_MODULE_PATH := $(TARGET_OUT)/app/LOCAL_SRC_FILES := TimeService.apkLOCAL_MODULE_TAGS := optionalLOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := platforminclude \$(BUILD_PREBUILT)

然后写到device.mk里

#TimeService.apkPRODUCT_PACKAGES += TimeService

最后在proprietary-blobs.txt里添加

#TimeService.apklib/libtime_genoff.solib/libTimeService.so

三、按键灯、呼吸灯

这个也是各种手机不一样,而且还必须修改代码-_-
对于没有编程基础的读者,就直接用官方rom的system/lib/hw/lights.msm8960.so

1.首先通过调试确定各种灯的调用路径

开一个adb shell,并取得root权限

cd /sys/class/ledsls

这样就可以列出当前有那些led设备,并记录下来
这里就以LG F200这种有实体按键的手机来举例吧

lcd背光/sys/class/leds/lcd-backlight/brightness红灯/sys/class/leds/led:red/brightness绿灯/sys/class/leds/led:green/brightness蓝灯/sys/class/leds/led:blue/brightness按键灯/sys/class/leds/button-backlight/brightness

如果读者想具体试验一下用命令控制各种灯的话,笔者介绍几个命令

echo 200 > /sys/class/leds/lcd-backlight/brightness 设置背光值为200echo 0 > /sys/class/leds/lcd-backlight/brightness 设置背光值为0echo 255 > /sys/class/leds/led:red/brightness 开红灯echo 0 > /sys/class/leds/led:red/brightness 关红灯cat /sys/class/leds/led:red/brightness查看当前的灯亮度值cat /sys/class/leds/led:red/max_brightness查看灯的最大亮度值

2.修改liblight代码

msm-aosp不像cm那样可以把liblight单独出来,所以咱就直接到源代码目录去修改
hardware/qcom/display/liblight
先把lights.c压缩备份一下
开始修改lights.c,首先修改三个颜色的呼吸灯调用地址
这里写图片描述
仿照呼吸灯的行,增加一行按键灯的路径

char const*const BUTTON_FILE        = "/sys/class/leds/button-backlight/brightness";

下面的这些路径,如果读者的机型不支持(也就是没有这个路径),那就把这些代码删掉
这里写图片描述

在rgb_to_brightness下面添加一段按键灯的调用函数
这里写图片描述

static intset_light_buttons(struct light_device_t* dev,        struct light_state_t const* state){    int err = 0;    int on = is_lit(state);    pthread_mutex_lock(&g_lock);    err = write_int(BUTTON_FILE, on?255:0);    pthread_mutex_unlock(&g_lock);    return err;}

然后拉到文件底部增加按键背光调用入口
这里写图片描述

    else if (0 == strcmp(LIGHT_ID_BUTTONS, name))        set_light = set_light_buttons;

这就是大概的步骤,对于没有编程基础的读者来说可能比较困难
请参考笔者提供的范例吧:
http://download.csdn.net/detail/benjaminwan/8452531

最后,提供一个泛泰A910的呼吸灯适配例子:
http://blog.csdn.net/benjaminwan/article/details/45112175

四、振动

这一段专门为泛泰而写
因为泛泰全系列机型内核里的振动代码都是非标准的

1.引用syhost对此部分的解析

http://blog.csdn.net/syhost/article/details/12125971
不论读者能否理解,咱们来实际调试一下就明白了
老套路了,开一个adb shell,并取得root权限
标准振动代码的手机,只要执行这句就能让手机振动起来,振动1秒
echo 1000 > /sys/class/timed_output/vibrator/enable

而泛泰手机官方内核必须是
echo 1311720 > /sys/class/timed_output/vibrator/enable

1311720这个值是如何得到的呢?
如果读者没有任何计算机基础,那么就以最直观的方式来试吧,打开window自带的计算器,使用程序员模式。
十进制输入数值1000,切换到十六进制,按Or键,再输入140000,按等于号,并切换到十进制显示就是1311720
简单来说,就是3E8|0x140000 = 1403E8,即,振动时间|0x140000

2.修改振动调用代码

对于cm来讲,振动代码可以BOARD_HAS_VIBRATOR_IMPLEMENTATION来自定义
msm-aosp比较简陋啦,只好直接改代码了
hardware/libhardware_legacy/vibrator/vibrator.c
只要在sendit函数里添加一句timeout_ms = 0x140000 | timeout_ms;即可
这里写图片描述

0 0
原创粉丝点击