MTK SmartPhone Record-(4)
1.MT6572修改蓝牙名称
若修改上层无效的话,则改底层。
上层:\mediatek\frameworks-ext\base\core\jni\android_bluetooth_common.h
修改: #define BTMTK_ANDROID_DEFAULT_LOCAL_NAME "ANDROID BT"
底层:\mediatek\config\common\custom.conf
修改: bluetooth.HostName = Zyrex
2.延时背光
\mediatek\source\kernel\drivers\leds\leds.c
static int mt65xx_led_set_cust(struct cust_mt65xx_led *cust, int level)
{
....
switch (cust->mode) {
case MT65XX_LED_MODE_PWM:
if(strcmp(cust->name,"lcd-backlight") == 0)
{
bl_brightness = level;
if(level == 0)
{
mt_set_pwm_disable(cust->data);
mt_power_off (cust->data);
}else
{
level = brightness_mapping(tmp_level);
if(level == ERROR_BL_LEVEL)
level = brightness_mapto64(tmp_level);
mdelay(200); //加延时
backlight_set_pwm(cust->data, level, bl_div,&cust->config_data);
}
bl_duty = level;
}else{...}
3.修改测试apk读出的CPU主频
修改系统在sys下面的频率显示,在/kernel/drivers/cpufreq/cpufreq.c
/**
* cpufreq_per_cpu_attr_read() / show_##file_name() -
* print out cpufreq information
*
* Write out information from cpufreq_driver->policy[cpu]; object must be
* "unsigned int".
*/
#define show_one(file_name, object) \
static ssize_t show_##file_name \
(struct cpufreq_policy *policy, char *buf) \
{ \
return sprintf(buf, "%u\n", policy->object);
\
}
#define show_change(file_name, object) \
static ssize_t show_##file_name \
(unsigned int val, char *buf) \
{ \
return sprintf(buf, "%u\n", 1200000);
\
}
show_one(cpuinfo_min_freq, cpuinfo.min_freq);
//show_one(cpuinfo_max_freq, cpuinfo.max_freq);
show_change(cpuinfo_max_freq, cpuinfo.max_freq); //change by azad for change the freq
show_one(cpuinfo_transition_latency, cpuinfo.transition_latency);
show_one(scaling_min_freq, min);
show_one(scaling_max_freq, max);
//show_one(scaling_cur_freq, cur);
show_change(scaling_cur_freq, cur);
cpuinfo.max_freq 系统的最大频率
scaling_cur_freq 系统当前的频率
修改这两个频率的的接口,不从系统中读取,直接写死
4. 使用定时器timer实现按钮闪烁的效果
private count = 0;
private change = false;
import java.util.Timer;
import java.util.TimerTask;
//animation flash effect
private void forwardbtnAnimation(){
count = 0;
change = false;
timer = new Timer();
task = new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
if (count < 10) { //闪烁5次
if (change == true) {
change = false;
forwardbtn.setVisibility(View.VISIBLE);
} else {
change = true;
forwardbtn.setVisibility(View.INVISIBLE);
}
count++;
}
}
});
}
};
timer.schedule(task,0,100); //0表示立即开始,100为每100ms执行一次
}
提示:android控件的都是线程不安全的,因此更新控件必须得放在Runnable()中。
5. 下面我们就来讲讲如何通过代码来获取CPU频率:
package com.orange.cpu;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
public class CpuManager {
// 获取CPU最大频率(单位KHZ)
// "/system/bin/cat" 命令行
// "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" 存储最大频率的文件的路径
public static String getMaxCpuFreq() {
String result = "";
ProcessBuilder cmd;
try {
String[] args = { "/system/bin/cat",
"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" };
cmd = new ProcessBuilder(args);
Process process = cmd.start();
InputStream in = process.getInputStream();
byte[] re = new byte[24];
while (in.read(re) != -1) {
result = result + new String(re);
}
in.close();
} catch (IOException ex) {
ex.printStackTrace();
result = "N/A";
}
return result.trim();
}
// 获取CPU最小频率(单位KHZ)
public static String getMinCpuFreq() {
String result = "";
ProcessBuilder cmd;
try {
String[] args = { "/system/bin/cat",
"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq" };
cmd = new ProcessBuilder(args);
Process process = cmd.start();
InputStream in = process.getInputStream();
byte[] re = new byte[24];
while (in.read(re) != -1) {
result = result + new String(re);
}
in.close();
} catch (IOException ex) {
ex.printStackTrace();
result = "N/A";
}
return result.trim();
}
// 实时获取CPU当前频率(单位KHZ)
public static String getCurCpuFreq() {
String result = "N/A";
try {
FileReader fr = new FileReader(
"/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq");
BufferedReader br = new BufferedReader(fr);
String text = br.readLine();
result = text.trim();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
// 获取CPU名字
public static String getCpuName() {
try {
FileReader fr = new FileReader("/proc/cpuinfo");
BufferedReader br = new BufferedReader(fr);
String text = br.readLine();
String[] array = text.split(":\\s+", 2);
for (int i = 0; i < array.length; i++) {
}
return array[1];
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
6. MT6572建工程,需另外在如下目录建
\bootable\bootloader\lk\build-mbk72_wet_jb3_yibotong
\bootable\bootloader\lk\build-mbk72_wet_jb3_yibotong\custom\mbk72_wet_jb3_yibotong
\bootable\bootloader\lk\custom\mbk72_wet_jb3_yibotong
\bootable\bootloader\lk\project\mbk72_wet_jb3_yibotong.mk
7. Class.getSimpleName()的作用
public class sample{
public static void main(String[] args){
//得到类的简写名称
System.out.println(sample.class.getSimpleName());
//得到对象的全路径
System.out.println(sample.class);
//得到对象的类模板示例,也就是Class
System.out.println(sample.class.getClass());
//得到Class类的名称
System.out.println(sample.class.getClass().getName());
}
}
打印结果为:
sample
class com.lovo.test.sample
class java.lang.Class
java.lang.Class
8.MTK Android部分配置修改
(1)MTK Android浏览器输入框字数限制
/mediatek/frameworks/base/res/res/values/config.xml: <integer name="max_input_browser_search_limit">2000</integer>
(2)系统默认值(默认背光亮度及默认背光时间):
修改如下无效:
frameworks\base\core\res\res\values\Config.xml: <integer name="config_screenBrightnessSettingDefault">102</integer>
DisplaySettings.java中private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
需要修改:
frameworks/base/packages/SettingsProvider/res/values/defaults.xml中的值,系统初始化创建table的时候会从default.xml中取值
(3)有些跟运营商有关的配置放在:
Defaults.xml (\mediatek\operator\op01\packages\apps\plugins\res\values\)
(4)默认音量修改:
思路:DatabaseHelper.java中查看加载音量数据库函数loadVolumeLevels(db); 具体修改AudioManager.java文件中的DEFAULT_STREAM_VOLUME
最大音量:
AudioService.java中 MAX_STREAM_VOLUME
(5)系统数据库初始化流程参考:
http://www.docin.com/p-583591404.html
(6)view相关配置:
ViewConfiguration.java (base\core\java\android\view)
如默认待机长按HOME键时间配置: DEFAULT_LONG_PRESS_TIMEOUT
(7)待机launcher相关速度优化参数配置:
PagMAX_PAGE_SNAP_DURATIONedView.java (z:\media\f89cbe729cbe2b50\project\mt6589_td\packages\apps\launcher2\src\com\android\launcher2)
等
(8)电池电量处理消息:
BatteryService.java,如发送低电消息sendBatteryLow,4.2.1中在文件PowerUI.java中处理,先前的可能在StatusBarPolicy.java中处理
状态栏电量百分比显示:
BatteryController.java:
action:ACTION_BATTERY_PERCENTAGE_SWITCH 控制电量显示方式
(9)屏幕点亮:
mPowerManager.wakeUp(SystemClock.uptimeMillis());
(10)RTSP,RTP,RTCP端口号
http://wenku.it168.com/d_000650129.shtml
(11)NavigationBar开关
frameworks/base/core/res/res/values/config.xml:<boolname="config_showNavigationBar">false</bool>
参考:http://blog.csdn.net/yihongyuelan/article/details/7623578
(12)通话界面下拉状态栏屏蔽:
InCallScreen.java中函数: updateExpandedViewState
(13)下拉状态栏快捷图标代码:
QuickSettingsConnectionModel.java (frameworks\base\packages\systemui\src\com\android\systemui\statusbar\toolbar)
(14)wifi状态栏和设置菜单中在不同的地方显示(4.2):
状态栏在NetworkControllerGemini.java里面的updateWifiIcons函数更新icon
设置菜单在AccessPoint.java里调用update通知preference更新icon
(15)通话界面线控耳机:(目前验证下来并没有执行这里)
PhoneUtils.java文件中函数:handleHeadsetHook
(16)来电/锁屏界面自定义view:
com.android.internal.widget.multiwaveview.GlowPadView
部分配置:
prvandroid:targetDrawables="@array/incoming_call_widget_3way_targets"
?prvandroid:targetDescriptions="@array/incoming_call_widget_3way_target_descriptions"
prvandroid:directionDescriptions="@array/incoming_call_widget_3way_direction_descriptions"
prvandroid:handleDrawable="@drawable/ic_in_call_touch_handle"
prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
prvandroid:outerRadius="@*android:dimen/glowpadview_target_placement_radius"
prvandroid:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring"
prvandroid:snapMargin="@*android:dimen/glowpadview_snap_margin"
prvandroid:vibrationDuration="20"
prvandroid:feedbackCount="1"
prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"?
配置修改:frameworks/base/core/res/res/values/dimens.xml
(17)按键定义:
KeyEvent.java (frameworks\base\core\java\android\view)
(18)按键处理:
PhoneWindowManager.java (frameworks\base\policy\src\com\android\internal\policy\impl)
参考《Android的全局键(home键_长按耳机键)详解》:http://wenku.baidu.com/view/43f4606ea98271fe900ef900.html
按键驱动底层发消息:
accdet.c
(18)Vcard相关:
tag字段定义:VCardConstants.java
9. Android 4.2 系统编译 找不到添加的内部资源:com.android.internal.R
android 4.2相比4.1又做了一些改动,将所有私有资源的声明放到了framework/base/core/res/res/values/symbols.xml中。
如果对系统新增了一些资源进行源码编译时会遇到 com.android.internal.R.XX can not find symbol的问题。
具体解决方法网上已经有人提出:
make framework 2>&1 | sed -n -f MakeJavaSymbols.sed | sort -u
使用这个命令将会列出所有新增的私有资源,将它们拷贝到symbols.xml中即可。
10. APK安装路径
<manifest> 标签下的android:installLocation 属性internalOnly 是安装到手机内存,preferExternal 是sd卡 “auto”是先检测内存是否足够空间,如果不能安装就会选择安装到sd卡上
11. 存储
手机: internal storage 即:Data下的
存储卡: /storage/sdcard0 即:phone storage 文件管理下看得到的
扩展存储: /storage/sdcard1/ 即: 外插T卡
12. android 修改默认浏览器的默认主页和去除书签
(1)修改默认的 主页网址
packages/apps/Browser/src/com/android/browser/sitenavigation下SiteNavigation.java里
把 public static final Uri SITE_NAVIGATION_URI = Uri.parse("content://com.android.browser.site_navigation/websites");改成
public static final Uri SITE_NAVIGATION_URI = Uri.parse("http://www.google.com/");
在mtk_strings.xml 与 strings.xml里 把
<string name="homepage_base_site_navigation" translatable="false">
content://com.android.browser.site_navigation/websites</string>
改成
<string name="homepage_base_site_navigation" translatable="false">
http://www.google.com/</string>
(2) 修改书签
packages/apps/Browser/res/values/strings.xml 或有可能是 \packages\apps\Browser\res\values\mtk_strings.xml
strings.xml mtk_strings.xml注释掉下面的
<!-- The build-in bookmark for yahoo -->
<string-array name="bookmarks_for_yahoo" translatable="false">
<!--item>Yahoo! Mobile</item>
<item>http://m.yahoo.com/?.tsrc=mtk&.sep=mtkbrowser</item>
<item>Yahoo! Mail</item>
<item>http://m.yahoo.com/mail?.tsrc=mtk&.sep=mtkbrowser</item>
<item>Yahoo! Messenger</item>
<item>http://m.yahoo.com/w/bp-messenger?.tsrc=mtk&.sep=mtkbrowser</item>
<item>Yahoo! News</item>
<item>http://m.yahoo.com/news?.tsrc=mtk&.sep=mtkbrowser</item-->
</string-array>
<string-array name="bookmarks" translatable="false">
<!--item>Google</item>
<item>http://www.google.com/</item>
<item>Picasa</item>
<item>http://picasaweb.google.com/</item-->
......
</string-array>
bookmarks_icons.xml里 注释掉下面的
<array name="bookmark_preloads_for_yahoo">
</array>
<array name="bookmark_preloads">
<!--item>@raw/favicon_google</item>
<item>@raw/thumb_google</item>
<item>@raw/favicon_picasa</item>
<item>@raw/thumb_picasa</item-->
......
</array>
13. 添加、设置APN
\mediatek\frameworks\base\telephony\etc\apns-conf.xml
14. Android.mk中添加宏定义(试了一次,好像没生效)
在Boardconfig.mk
中添加一个
IS_FLAG := true
由于Boardconfig.mk和各目录的Android.mk是相互关联的
所以我们可以在Android.mk 中添加一个
ifdef IS_FLAG
LOCAL_CFLAGS += -DHHHH
endif
在Android.mk中添加的这行相当于在 该目录下的文件中定义了一个宏
#define HHHH
如果我们想要在某个工程中根据工程的不同来对相关的代码中的某段参数进行选择时,可以参考此方法
15. 紧急号码定制
在 \frameworks\base\telephony\java\android\telephony\PhoneNumberUtils.java
String []emergencyNumList = {"112", "911", "000", "08", "110", "118", "119", "999"};
16. 各国时区显示
\frameworks\base\core\res\res\xml\time_zones_by_country.xml
17. 按键配置文件位置
find -name *.idc
./frameworks/base/data/keyboards/qwerty2.idc
./frameworks/base/data/keyboards/qwerty.idc
./out/target/product/godbox/system/usr/idc/qwerty2.idc
./out/target/product/godbox/system/usr/idc/qwerty.idc
./device/samsung/tuna/Melfas_MMSxxx_Touchscreen.idc
./device/samsung/crespo/mxt224_ts_input.idc
./device/moto/wingray/qtouch-touchscreen.idc
18. 72 T卡热插拨如何配置
软件修改如下:
GPIO配置,Board.c中
#define MSDC_SDCARD_FLAG (MSDC_SYS_SUSPEND | MSDC_CD_PIN_EN | MSDC_REMOVABLE | MSDC_HIGHSPEED| MSDC_UHS1 |MSDC_DDR)
插上T卡,第9pin跟第8pin 相连,电压一直在跳动
R723,R724贴0欧电阻
PS:还是硬件问题,插上T卡将第9脚接地即可
FAQ Content
[DESCRIPTION]
在实现SD卡热插拔机制时,需要注意的几个方面
[SOLUTION]
1,sd卡热插拔机制的实现需要软件和硬件同时配合才能实现。
2,在电路上,需要一根单独的检测pin脚,通过检测pin脚的高低电平来检测sd卡的插拔动作,并在dws中将其配置成上拉或下拉
3,软件上的配置主要就是在\mediatek\custom\<proj>\kernel\core\src\board.c中,msdc1_hw 结构体中的 flags 的 MSDC_CD_PIN_EN 和 MSDC_REMOVABLE ,这两个flag是热插拔的flag,如果不需要热插拔,请把这两个flag移除。
4,如果是低电平触发,将msdc1_hw中的.cd_level 设置成 MSDC_CD_LOW,否则设置成MSDC_CD_HIGH
19. MT6575 3G切换2G
(1)在mediatek/custom/common/modem/ 路径下增加一个文件夹: abc_gprs
(2)修改修改编译工程配置文件ProjectConfig.mk 文件
[2G]
CUSTOM_MODEM= abc_gprs
MTK_VT3G324M_SUPPORT= no
MTK_MODEM_SUPPORT= modem_2g
MTK_FD_SUPPORT= no
MTK_GEMINI_3G_SWITCH=no
MTK_FD_FORCE_REL_SUPPORT=no
MTK_RAT_WCDMA_PREFERRED = no
MTK_MD1_SUPPORT=1
[3G]
CUSTOM_MODEM= yecon75_tb_ics_hspa
MTK_VT3G324M_SUPPORT= yes
MTK_MODEM_SUPPORT= modem_3g
MTK_FD_SUPPORT= yes
MTK_GEMINI_3G_SWITCH=yes
MTK_FD_FORCE_REL_SUPPORT=yes
MTK_RAT_WCDMA_PREFERRED =yes
MTK_MD1_SUPPORT=3
执行命令 ./mk abc new
MTK SmartPhone Record-(4)相关推荐
- MTK 驱动开发(35)---待机功耗分析流程
1.目的 2.MTK平台各个场景功耗数据测试方法 很多功耗问题都是因为测试手法不对,列出一些常用场景功耗测试手法. 测试功耗数据之前,请先确认以下配置: 1.关闭 WIFI/BT/GPS,关闭数据 ...
- MTK 驱动开发(22)---camera 硬件和软件概述
1.Camera 硬件介绍 1,Image Sensor类型 a) YUV Sensor YUV Sensor输出的Data格式为YUV,图像的效果处理使用Sensor内部的ISP,BB端接收 ...
- MTK 驱动开发(30)---Memory 移植
一.MTK 平台和高通平台在器件选型时都要求选择已经验证过的器件,第一步需要QVL验证 1) 根据硬件原理图和EMMC 和DDR厂家的芯片资料, 确定EMMC 和DDR 64+4,型号如下: EMM ...
- MTK 驱动开发(16)---LCM 移植
对于LCM驱动移植,一般分为三部曲: 1.硬件IO口配置: 2.确保LCM背光能够正常点亮: 3.LCM驱动移植: 硬件电路: 1.GPIO配置 打开 mediatek\dct\DrvGen.exe ...
- MTK 驱动开发(5)---bootloader
1.框架 MTK 平台的启动过程经过四个模块,分别是BootRom,Preloader,LK,Kernel. 2 .bootloader到kernel启动总逻辑流程图 3.Boot ROM Boot ...
- MTK 驱动开发(40 )---TP乱跳频原因
触摸屏(TP)乱跳原因总结 导致触摸屏乱跳的原因大概分为5类: (1) 触摸屏硬件通道损坏 (2)触摸屏固件版本太低 (3) 触摸屏工作电压异常 (4) 射频干扰 (5)触摸屏校准异常 硬 ...
- MTK 驱动开发(37)--如何确定阻止进入suspend的原因
1.系统无法进入suspend 系统没有进入suspend,主要的原因是因为系统有锁导致. 锁一般分为:APP透过PowerManager拿锁,以及kernel wakelock. 分析上层持锁的问题 ...
- MTK 驱动开发(39)--低功耗分析工具
1.功耗问题抓日志 功耗问题抓log请遵循几条原则: ------------------------------------------------------------------------- ...
- MTK 驱动开发(36)---低功耗基础知识
1.sleep /suspend suspend确切的说是MCU(ARM )的suspend,也就是cpu进入Wait for interrupt状态(WFI):因为对整个系统来说,CPU进WFI是整 ...
- MTK 驱动开发(18)---LCD 参数理解
转载自http://blog.csdn.net/longxiaowu/article/details/24319933 Linux内核的amba lcd控制器使用clcd_panel结构体表示一个LC ...
最新文章
- 【redis】c/c++操作redis(对于hiredis的封装)
- 终于有人把各路StyleGAN做了个大汇总 | Reddit超热
- python yield遍历目录
- 旧文 | 舒迅:产品经理必读的九步法
- python 使用进程池Pool进行并发编程
- ITK:注册IO工厂RegisterIOFactories
- 《HTTP 权威指南》笔记:第十四章 安全 HTTP
- 代码内查找函数引用_叮~~二级操作题 excel常考函数大梳理
- 电脑动态壁纸_每日壁纸—水彩插画少女动漫手机高清无水印壁纸第二波
- android 自动化测试之monkeyrunner学习(三),自动化测试之Monkeyrunner
- mysql undrop_MySQL · 数据恢复 · undrop-for-innodb
- 一纬度横直线等于多公里_必备 | 高中物理必修一、必修二知识点提纲,预习复习一次搞定!...
- 前端全栈必会node框架koa。。。
- Mac 好用的 Android 模拟器整理(玩游戏、装应用、支持咸鱼、拼多多...)
- (7)全民小视频引流脚本模块化开发01-关注用户By飞云脚本学院
- python保存模型方法_TensorFlow模型保存和提取的方法
- mysql 查看 脏页_MySQL:刷脏页
- Win11触摸键盘如何开启?
- RAM和ROM(verilog)
- java ppt 绘图,PPT图片别再直接插入,这样处理一下,让你的PPT秒变高逼格