<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Android开发]]></title><description><![CDATA[DISCOVER·POTENTIAL]]></description><link>https://blog.youkuaiyun.com/mike8825</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mike8825]]></copyright><item><title><![CDATA[调试SAR SENSOR的一些感悟]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/122708039</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/122708039</guid><author>mike8825</author><pubDate>Sun, 10 Apr 2022 19:19:05 +0800</pubDate><description><![CDATA[手机工作时是有电磁辐射辐射的https://zhuanlan.zhihu.com/p/353591714，那怎样能降低电磁辐射呢。

   sar sensor能感应到有人在使用手机，从而发消息让modem降低发射功率(从而达到标准)。如果没人在使用手机，手机可以按正常功率工作。sar sensor的工作原理不描述，芯片目前接触到是艾为的aw9610x系列，sar sensor(可理解为一个接近传感器)一般有现成的驱动，调试也比较简单。

    sar sensor默认有一个...]]></description><category></category></item><item><title><![CDATA[CTS环境搭建]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/124080153</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/124080153</guid><author>mike8825</author><pubDate>Sun, 10 Apr 2022 17:18:37 +0800</pubDate><description><![CDATA[网上有很多搭建cts环境的方法，如Android GMS（cts/gts/cts-v）认证 - 简书。这里是从驱动工程师的角度来搭建一个简易的cts环境，因为一些cts失败项需要驱动工程师修改，但修改后又没有环境去验证。如果能搭建一个简易的cts环境，就能极大促进工作效率。

笔者用的是Ubuntu20.04的OS。

获取CTS工具下载地址，有条件的可以直接下载，或者让GMS的同事发一份过来。

安装openjdk


apt install openjdk-11-jre-headless
...]]></description><category></category></item><item><title><![CDATA[使用gimp批量处理图片]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/122708049</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/122708049</guid><author>mike8825</author><pubDate>Wed, 26 Jan 2022 20:25:59 +0800</pubDate><description><![CDATA[先安装插件


sudo apt-get install gimp-plugin-registry

已720*1280的图片改成800*1280的为例

打开gimp，滤镜--&gt;Batch--&gt;Batch Process，输入中选择一张/多张图片











填充的颜色在主界面上选择




]]></description><category></category></item><item><title><![CDATA[记一次诡异的摄像头调试经历]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/122399980</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/122399980</guid><author>mike8825</author><pubDate>Sun, 09 Jan 2022 22:56:40 +0800</pubDate><description><![CDATA[新主板回来，需要点亮摄像头。主板摄像头情况(前后摄像的i2c和mclk都是独立的)。将驱动文件移植好之后(后摄sp2507 前摄sp0a09)，后摄能点亮，看内核打印信息，sp0a09不到id。按https://blog.youkuaiyun.com/mike8825/article/details/106163001里的检查方法检查后，没发现异常。这些摄像头在另一个项目上是能点亮的，而这两个项目的camera引脚能完全对上(缺货，替代方案)cam_rst,cam_pdn,cam_i2c,vcamd,vc...]]></description><category></category></item><item><title><![CDATA[Android插拔usb亮屏流程]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/122150320</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/122150320</guid><author>mike8825</author><pubDate>Sun, 26 Dec 2021 01:45:50 +0800</pubDate><description><![CDATA[遇到一个问题，插拔usb，手机不亮屏。先来分析下，插拔usb亮屏流程。

关键流程




updatePowerStateLocked---&gt;updateIsPoweredLocked

private void updateIsPoweredLocked(int dirty) {
...
    final boolean wasPowered = mIsPowered;
	mIsPowered = mBatteryManagerInternal.isPowered(BatteryManager.]]></description><category></category></item><item><title><![CDATA[全志调试总结]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/122018975</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/122018975</guid><author>mike8825</author><pubDate>Sat, 18 Dec 2021 23:49:15 +0800</pubDate><description><![CDATA[1.下载工具有window和Linux版本(可以支持ubuntu20.04)，用官网释放的工具就行，有些电脑要关掉安全启动usb驱动才能工作正常，也可以使用开源的usb驱动(https://github.com/linux-sunxi/sunxi-livesuite)。
]]></description><category></category></item><item><title><![CDATA[记一次gpio按键驱动调试经历]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/121472902</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/121472902</guid><author>mike8825</author><pubDate>Mon, 22 Nov 2021 17:20:37 +0800</pubDate><description><![CDATA[Linux有标准的gpio按键驱动
sprd平台只需配置下dts,在mt6761平台(gpio配置成gpio模式)也验证了该驱动。


gpio-keys {
             key-volumedown {
                 label = "Volume Down Key";
                 linux,code = &lt;KEY_VOLUMEDOWN&gt;;
                 gpios = &lt;&amp;ap_gpio 124 GP]]></description><category></category></item><item><title><![CDATA[mtk平台耳机检测流程记录]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/121325901</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/121325901</guid><author>mike8825</author><pubDate>Mon, 15 Nov 2021 00:41:00 +0800</pubDate><description><![CDATA[检测方案

检测方案1(主流方案):耳机插拔中断接的PMIC(HP_EINT+ACCDET)

CONFIG_ACCDET_EINT_IRQ&amp;&amp; CONFIG_ACCDET_SUPPORT_EINT0
CONFIG_ACCDET_EINT_IRQ&amp;&amp; CONFIG_ACCDET_SUPPORT_EINT1//平台默认的是EINT0，EINT1不确定具体作用
   



检测方案2:耳机插拔中断接AP(EINT_EAR+ACCDET)





共同点:A...]]></description><category></category></item><item><title><![CDATA[mtk平台使用GAT工具分析aee db文件]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/121308903</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/121308903</guid><author>mike8825</author><pubDate>Sun, 14 Nov 2021 15:47:07 +0800</pubDate><description><![CDATA[AEE是一个异常的捕获和生成调试信息的机制，通过gat工具定位了两个问题，分享下。

先到官网下载GAT工具(包含window和linux版本)。默认user/debug版本没有开启aee，参考FAQ25047打开或者直接用eng版本测试。复现问题后，找到对应的aee_exp文件夹(/data/vendor/aee_exp/ /data/aee_exp/)，然后将pull到电脑里。


cd /data/
find -nameaee_exp

打开GAT工具
...]]></description><category></category></item><item><title><![CDATA[linux下的extcon驱动小析]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/121186656</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/121186656</guid><author>mike8825</author><pubDate>Sun, 07 Nov 2021 01:15:59 +0800</pubDate><description><![CDATA[量产的项目遇到一个问题，10%的充电线不充电。将这些不良的充电线接到另一个项目或者其他手机上，能正常充电。问题跟着线走，但客户纠结为什么其他手机能充。

   拿到问题的usb线后，通过dump_stack函数查看充电流程的堆栈，发现实现充电流程的检测方式不一样。一种是通过vbus来检测充电(这种比较容易理解)，另一种通过typec中断(typec线的cc脚会进行握手，标准协议)来检测充电器的插拔。由于typec线不良(内部的电阻阻值不对)，导致握手失败，进而不能除非typec中断，所以看...]]></description><category></category></item><item><title><![CDATA[Linux下的uevent]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/120475935</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/120475935</guid><author>mike8825</author><pubDate>Sat, 25 Sep 2021 20:31:11 +0800</pubDate><description><![CDATA[查找linux的uevent节点(find /sys -name uevent)，大概有1000多个，那这些节点是怎么实现的呢。



drivers/base/core.c

有如下代码，每创建一个device，都会创建一个event节点


static ssize_t uevent_show(struct device *dev, struct device_attribute *attr,char *buf)
{
	...
	retval = kset-&gt;uevent_ops-&gt;ue..]]></description><category></category></item><item><title><![CDATA[print_hex_dump用法]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/120475528</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/120475528</guid><author>mike8825</author><pubDate>Sat, 25 Sep 2021 18:35:01 +0800</pubDate><description><![CDATA[char buf[]={0x0,0x1,0x2,0x3,0x04,0x05,0x06,0x07,0x8,0x09,0xa,0xb,0xc,0x0d,0x0e,0x0f,0x10,0x11};
	pr_info("111111\n");
	print_hex_dump(KERN_DEBUG,"=====",DUMP_PREFIX_ADDRESS,16,1,buf,sizeof(buf),1);
	print_hex_dump(KERN_DEBUG,"=====",DUMP_PREFIX_ADDRESS,16.]]></description><category></category></item><item><title><![CDATA[linux使用gpio示例]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/120403450</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/120403450</guid><author>mike8825</author><pubDate>Tue, 21 Sep 2021 17:42:19 +0800</pubDate><description><![CDATA[常见的方式


foo_device {
	compatible = "acme,foo";
	red-gpios =&lt;&amp;gpio 17 GPIO_ACTIVE_HIGH&gt;; 
}
enum of_gpio_flags flags;
int gpio=of_get_named_gpio_flags(dev-&gt;of_node,"red-gpios", 0, &amp;flags);//获取dts的gpio
gpio_request_one(gpio, flags, "red-gpio]]></description><category></category></item><item><title><![CDATA[Android新建按键值]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/120245067</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/120245067</guid><author>mike8825</author><pubDate>Sun, 12 Sep 2021 00:07:19 +0800</pubDate><description><![CDATA[遗憾的是，该修改会导致失败cts测试失败。
]]></description><category></category></item><item><title><![CDATA[调整Wifi满格信号的阀值]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/118856424</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/118856424</guid><author>mike8825</author><pubDate>Sat, 17 Jul 2021 14:51:19 +0800</pubDate><description><![CDATA[要想wifi在信号比较差的时候也显示满格信号，可参考如下方法

http://aospxref.com/android-11.0.0_r21/xref/frameworks/base/wifi/java/android/net/wifi/WifiManager.java


    /** Anything worse than or equal to this will show 0 bars. */
    @UnsupportedAppUsage
    private static final in]]></description><category></category></item><item><title><![CDATA[记一次TP调试]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/118466760</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/118466760</guid><author>mike8825</author><pubDate>Sun, 04 Jul 2021 20:45:12 +0800</pubDate><description><![CDATA[客户反馈在wifi扫码界面待机，唤醒后TP概率不可用。log也提供过来了，看log，发现TP通信不上，报no ack。通信不上，可能是TP的电源有问题，因为TP使用了一路LDO进行供电，该LDO有多个外设在使用。于是测量该LDO的波形，没发现异常。量TP的波形，发现有点瑕疵。于是先改善波形再测下。TP建议的i2c上拉电阻为4.7k，mtk默认的上拉电阻为1k，于是改到5k(引脚内部只有4种阻值可选择)。修改后，复测依然出现问题。由于项目有兼容另一款TP，拿另一款TP进行测试，测试没发现问题，那可能就是TP的]]></description><category></category></item><item><title><![CDATA[rfg阻值校准方法]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/116897756</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/116897756</guid><author>mike8825</author><pubDate>Sun, 16 May 2021 19:34:39 +0800</pubDate><description><![CDATA[手机通过计算流进或流出电池的电流，来计算电池电量。通过获取fpu的电压，然后除以fgu的电阻，得到电流值。

由于fpu的电阻(精度1%)受pcb layout和贴片一致性的影响，需要校准fgu的阻值。原理就是给fgu灌固定的电流，然后软件读取fgu两端的电流I，然后得到修正系数。

以展讯平台为例，AB给3.8V电压开机，然后插入usb，先禁止充电(对电流有影响echo 1 &gt;stop_charge)。

然后另一路电源设置电压1V，限流1000mA，电源正极接电池座子负极，电源负极接主板地，然后读]]></description><category></category></item><item><title><![CDATA[Linux下的sys节点小析]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/116862311</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/116862311</guid><author>mike8825</author><pubDate>Sat, 15 May 2021 20:49:22 +0800</pubDate><description><![CDATA[先看使用的demo


static ssize_t ts_info_show(struct device *dev,struct device_attribute *attr, char *buf)
{
	return 0;
}

static DEVICE_ATTR(ts_info, 0400, ts_info_show, NULL);
 
static struct attribute *g[] = {
        &amp;dev_attr_ts_info.attr,
        NULL,]]></description><category></category></item><item><title><![CDATA[Linux下的power_supply小析]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/116857826</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/116857826</guid><author>mike8825</author><pubDate>Sat, 15 May 2021 18:51:52 +0800</pubDate><description><![CDATA[Android手机过power_supply的节点获取充电和电池信息，今天来分析下power_supply。先不讲那么多，用个demo来熟悉下


#include &lt;linux/module.h&gt;
#include &lt;linux/platform_device.h&gt;
#include &lt;linux/power_supply.h&gt;
struct mtk_charger_type {
	struct power_supply_desc usb_desc;
	struct p]]></description><category></category></item><item><title><![CDATA[mtk平台电池曲线合入方法]]></title><link>https://blog.youkuaiyun.com/mike8825/article/details/115841277</link><guid>https://blog.youkuaiyun.com/mike8825/article/details/115841277</guid><author>mike8825</author><pubDate>Sun, 18 Apr 2021 22:29:00 +0800</pubDate><description><![CDATA[5组不同温度下的电池曲线


ACTIVE_TABLE = &lt;(5)&gt;;
/* Table numbers per battery */

具体的温度


	TEMPERATURE_T0 = &lt;(50)&gt;;
	/* Battery temperature T0 */
	TEMPERATURE_T1 = &lt;(25)&gt;;
	/* Battery temperature T1 */
	TEMPERATURE_T2 = &lt;(0)&gt;;
	/* Battery te...]]></description><category></category></item></channel></rss>