我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1332|回复: 1

GSENSOR调试文档

[复制链接]

该用户从未签到

7

主题

13

回帖

7

积分

一级逆天

积分
7

社区居民终身成就奖

QQ
发表于 2015-6-17 21:28:12 | 显示全部楼层 |阅读模式
Gsensor
调试方法
-Allwinner
1
/*
Gsensor
调试方法-Version
0.1
*
Allwinner
Platform
*
2013-09-20
*
Author:
tzx-leis
tzx-hkz
*/
----------------------------------------------------------------------------------------------------------------
gsensor
原理:
gsensor
的作用是测量重力在
x,y,z
3个方向的分量。重力是1G=9.8。在
gsensor
driver
打印出的
x,y,z
值就是
gsensor
对3个分量经
ADC
转换后的原始值。
故在
HAL
层中,对其会做一个转换。
xx
=
9.8*(x/(2的
n
次方))
,n

ADC
的位数。dmard10为10bit
ADC,
故2的
n
次方为4*256=1024。而
d06是7bit。
----------------------------------------------------------------------------------------------------------------
本文主要从
gsensor
的驱动层、HAL
层、上层校准
APK
的添加三方面来阐述
gsensor
调试的简单方法。
----------------------------------------------------------------------------------------------------------------
1,驱动层:
文件路径:\lichee\linux-3.4\drivers\gsensor
驱动层是关键,有没有数据上报,是着整个
gsensor
是否能正常工作的基础。
a),确保驱动模块已经加载(默认编译为模块方式)
$
adb
shell
进入小机
$
lsmod
查看是否
gsensor
对应的模块。
若没有加载,则通过
cat
/proc/kmsg
>
gsensor.log
查看开机
log
中加载失败原因进行分析。
b),
利用
getevent
查看驱动是否有数据上报。
$
adb
shell
进入小机
$
getevent
-p
列出所有的
input
设备,查看对应的
event0还是
event1
$
getevent
/dev/input/event1
查看数据是否连续不断上报?
若没有数据上报,则分析驱动,打印
report
处上报的值。
通常出现以上问题,常为
I2C
通信失败,在软件端可以通过驱动
log
看出。
此时先检查
I2C
地址是否正确,然后重点检查硬件
I2C
是否连好,可能是由于虚焊或者芯片损坏导致。
c),
辅助查看
gsensor
属性,获取
gsensor
设备名
$
adb
shell
进入小机
$
cd
/sys/devices/sw_device/gsensor
(文件目录不尽相同,可从驱动文件中获知实际路径)
$
cat
即可获取
gsensor
name
通常还有其他的属性可以辅助查看,以详细了解
gsensor
的状态,如
enable、delay
等属性。
----------------------------------------------------------------------------------------------------------------
2,
HAL

文件路径:\android\device\softwinner\common\hardware\libsensors

Gsensor
调试方法
-Allwinner
2
HAL
主要是处理驱动层上报的数据,并对数据进行转换,由1024的
DA
值转换为1g。
此部分需要修改较少,仅注意在兼容时,加入对新增
gsensor
的支持即可。
HAL
层与驱动层的结口为
delay

enable。
gsensor.cfg
存放在小机的
system/usr/gsensor.cfg,用于记录各
gsensor

x,y,z
轴的方向。
调试时,直接
adb
pull
出来之后修改对应的
gsensor
方向,再
adb
push
进去,重启即可生效。
----------------------------------------------------------------------------------------------------------------
3,上层添加校准
APK
文件路径:/system/app
/system/lib
上层添加校准的
APK
具体实现方法可参考原厂提供的文件。一般包括
APK
以及对应的库文件。
设置选项中添加校准
APK
后,最重要的一点是如何通过
APK
判断
gsensor
的报点是否准确,以及
gsensor

x、y、z
轴判定。
a),
报点是否准确
通常不经过校准的
gsensor
都不是非常准的,即使在小机界面能左右旋转画面,一定需要通过报点数值进行判
定。
一般通过
APK
查看的默认的
x、y、z
值分别在自己的方向上为9.8附近的值即可满足校准的需求。若值为9.8的4
倍或者1/2倍或者
N
倍,均可相应的通过驱动或者
HAL
进行一个修改及补偿。
b),
gsensor

x、y、z
轴判定
当数值准确时,此时应该判断以及修改
gsensor
的方向,此点非常重要,一旦没有调好会导致整个
gsensor

功能失效,前面所有的工作也将失去意义。
评判
gsensor
的方向一定不能从界面旋转正确来作为标准,需要参考标准坐标系(符合右手定则)

何为标准坐标系:平板水平放置在桌面上,正面面对自己。此时
Z
轴应该为+值,且值为9.8左右,x、y
轴应该
为0值左右。
平行于身体的为
x
轴,左边不动,右边抬起时,x
轴的数值应该由0开始增大,直到垂直时为+9.8左右。
垂直于身体的为
y
轴,下边不动,上边抬起时,y
中的数值应该由0开始增大,直到垂直时为+9.8左右。
在辅助功能,先关闭“自动旋转屏幕”功能,安装
SensorMoniter.apk,通过以上动作进行操作。
若有不符合以上情况的,则相应的修改
gsensor.cfg
调整
x、y
轴的位置以及正负值,直到满足为止。
然后水平放置,点击校准,此时
gsensor
可以正常工作。
----------------------------------------------------------------------------------------------------------------
4,移植
gsensor
涉及的几部分
a),
驱动,兼容列表
b),
HAL
层对
gsensor
的支持
c),
上层添加校准
APK
d),
配置
sys_config.fex
文件
e),
增加
recovery
功能,即恢复出厂设置后也能保存校准文件
f),
gsensor.cfg
文件
----------------------------------------------------------------------------------------------------------------
Gsensor
调试方法
-Allwinner
3
NOTE:各种小问题集锦
1,
gsensor
没有校准,导致旋转缓慢。
2,
gsensor
水平放置的时候
z
轴为-9.8附近的值,导致需要垂直操作才能旋转(正常情况下45°即可旋转)

3,
没有参考标准坐标系,只通过小机界面的方向来判断
x、y
轴的值。导致玩神庙逃亡的时候,前后摇摆对应左
右摇摆,此需要修改
framework
层,设置
ro.sw.hwrotation。
----|device
目录下的
wing_k70.mk
文件添加:
ro.sf.rotation=180
----|frameworks/base/core/java/android/hardware/SystemSensorManager.java
修改如下:
----|if(SystemProperties.getInt("ro.sf.hwrotation",0)==180)//default
value
is
270;
for
adapt
gsensor
rotation
set
as
180
for
720D
4,
搞不清
x、y
轴如何判定,以及是否需要对调。
5,
没有生成校准文件。可能是由于没有权限或者是丢失了
APK
对应的库文件。
6,
da311待机唤醒时概率性不报点,由于待机后,gsensor
模块断电,唤醒后寄存器会重新初始化,但是时序受
到干扰,导致有些寄存器的值发生变化,导致不报点。修改对应的驱动文件中的变化的寄存器即可。
7,
dmard10、dmard06不管校准不校准都会出现一个现象,即
x/y
轴的数值上报抖动,导致玩一些游戏(竞技
摩托)时候会左右偏,不稳定。原因是报点不稳,在驱动
read_xyz
函数中加入滤波功能。效果好很多。d10的
抖动受到喇叭声音的影响很大,是由于
IC
内部对声音噪点的抗干扰的能力很弱,暂时不能解决。
8,
da311系统重启时,概率性出现
detect
函数失败,导致检测不到
da311
gsensor。由于寄存器中分两页,

切页过程中出现问题,因此
detect
读之前,做一次
wirte
切页操作。
9,
软件正常,但是有些
gsensor
校准之后,报点仍然出现问题,此时芯片损坏的概率比较大,属于不良芯片。
10,
调试时发现
gsensor
报点
x,y,z
轴均为0,调试发现
gsensor.cfg
中没有对应
gsensor
的配置导致,加
上即可。
----------------------------------------------------------------------------------------------------------------
回复

使用道具 举报

  • TA的每日心情
    开心
    昨天 13:10
  • 签到天数: 101 天

    [LV.6]常住居民II

    49

    主题

    1万

    回帖

    7万

    积分

    三级逆天

    积分
    73174

    终身成就奖特殊贡献奖原创先锋奖社区居民忠实会员社区劳模最爱沙发社区明星原创达人优秀斑竹奖宣传大使奖

    QQ
    发表于 2015-6-18 00:22:30 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    论坛开启做任务可以
    额外奖励金币快速赚
    积分升级了


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    平平安安
    TOP
    快速回复 返回顶部 返回列表