如何调整Gsensor方向

Android 系统中,很多东西会依赖 Gsensor 方向,比如:Camera、系统转屏,及其他 APP,因此 Gsensor 的方向正不正常,将会影响到系统能不能正常用。
在 Rom 开发,Gsensor 的调校往往是由驱动工程师去做的,但求人不如求自己,作为软件工程师,至少应该了解一下如何调节 Gsensor 方向。

下面将简单介绍一下Gsensor的方向调节,不需要看懂代码,知道怎么调节就可以了。

1、
找到项目的 dts 文件,它一般在:

\kernel-xx\arch\arm\boot\dts\project.dts

这里的kernel-xx取决于项目用的哪个,不清楚可以咨询下驱动的同事;project 替换成对应的项目名,也就是launch时选的那个。

2、
在 dts 文件中搜索gsensor,将会看到如下代码:

gsensor@18 {
    compatible = "mediatek,gsensor";
    reg = <0x18>;
    direction = <13>;/* ,5,*/
};

这里面direction就是用来控制 Gsensor 方向的,13就是当前的方向,具体调节时,需要以13作为参考依据。

3、
这个13到底代表什么,我们不知道,不过源码上给了一段Human readable的对照代码,这段代码在:

\kernel-xx\drivers\misc\mediatek\sensors-1.0\hwmon\hwmsen\hwmsen_helper.c

在这个文件中,搜索hwmsen_convert,就会看到这段代码:

struct hwmsen_convert map[] = {
/*0*/   {{ 1, 1, 1},{1,0,2}},
/*1*/   {{-1, 1, 1},{1,0,2}},
/*2*/   {{ 1,-1, 1},{1,0,2}},
/*3*/   {{ 1, 1,-1},{1,0,2}},
/*4*/   {{-1,-1, 1},{1,0,2}},
/*5*/   {{-1, 1,-1},{1,0,2}},
/*6*/   {{ 1,-1,-1},{1,0,2}},
/*7*/   {{-1,-1,-1},{1,0,2}},
/*8*/   {{ 1, 1, 1},{0,1,2}},
/*9*/   {{-1, 1, 1},{0,1,2}},
/*10*/  {{ 1,-1, 1},{0,1,2}},
/*11*/  {{ 1, 1,-1},{0,1,2}},
/*12*/  {{-1,-1, 1},{0,1,2}},
/*13*/  {{-1, 1,-1},{0,1,2}},
/*14*/  {{ 1,-1,-1},{0,1,2}},
/*15*/  {{-1,-1,-1},{0,1,2}},
};

这里面,第一组{1, 1, 1}用来控制 XYZ 轴的反转,也就是说,当 XYZ 某一个或某几个出现反向了,就需要调整这一组,将对应的值取修改为负值
灵魂画师来煮个栗子,比如Y轴正常,X轴表现出来是反的那么就是下面这个样子:(Z轴垂直于屏幕向上,灵魂画师画不出来,大家凑合看看,自己脑补一下Z轴。)
如何调整Gsensor方向_第1张图片

第二组{1,0,2}用来控制 XYZ 轴的对调,意思就是说,当 XYZ 变成 XZY、ZXY、ZYX 等时,就需要调整这一组值,但这里调整的时候,不需要取负值,直接交换位置就可以了。
灵魂画师决定再煮个栗子,假设XY轴表现出来的是对调的,也就是下面这个样子:(灵魂画师仍旧画不出来 Z 轴)
如何调整Gsensor方向_第2张图片

到这里,相信大家已经明白为什么要记住前面的direction = <13>,并要以它为参考依据进行调整了。


总结:
如何调整 Gsensor 方向并不难,重点在理清楚 hwmsen_convert 的对应关系,然后根据机器表现进行修正就可以了。
但是,这里还有一个重中之重的问题,那就是如何确定 XY 轴!要想确定 XY 轴,首先得搞清楚机器的0度方向,这个方向一般就是平放机器,开机后机器显示的方向。

注意,Android 设备这么多种,并不是所有设备都是长边是 Y轴,短边是 X轴 的。

灵魂画师继续煮栗子,假设机器平放开机后是竖屏显示的,那 XY 就是这样的:
如何调整Gsensor方向_第3张图片
假设平放开机后是横屏显示的,那 XY 就是这样子的:
如何调整Gsensor方向_第4张图片

上面的事例图仅供参考,实际情况可能远比这个复杂,请根据实际情况来。


本文同步推送到微信公众号:灰灰的Rom笔记
微信扫描二维码,获取更多信息。
如何调整Gsensor方向_第5张图片

你可能感兴趣的:(Android)