重力感应调试记录

      今天移植完内核后,发现gsensor方向不对,而且机器总是自动死机或重启,从串口信息来看,有报gsensor错误的信息,于是就先从gsensor调试开始做起,本人也是第一次调试gsensor,在调试之前也在网上找了很多相关方面的资料文献,但感觉作用不是很大,和后来本人调试的操作方法也存在些许差异,下面我就简单介绍一下我亲身调试过的操作步骤:

     1.首先进行基准调试,打开device/.../目录下的device.mk文件,更改ro.sf.hwrotation的值,比如0,90,180或270,然后再进入out/../目录下删除build.prop文件,进行make编译,当然,gsensor基准正常的就可以不进行这个操作了(基准:开机进入桌面,解锁后桌面方向正常,进入设置,点击自动旋转屏幕,屏幕由横屏切换竖屏)

     2.其次,进入kernel\drivers\input\gsensor目录下找到内核配置中选中的gsensor芯片对应的驱动代码文件,我使用的是mma8452,打开mma8452.c文件,找到以下代码:

static void mma8452_report_value(struct i2c_client *client, struct mma8452_axis *axis)
{
 struct mma8452_data *mma8452 = i2c_get_clientdata(client);
    //struct mma8452_axis *axis = (struct mma8452_axis *)rbuf;

 /* Report acceleration sensor information */
    input_report_abs(mma8452->input_dev, ABS_X, axis->x);
    input_report_abs(mma8452->input_dev, ABS_Y, axis->y);
    input_report_abs(mma8452->input_dev, ABS_Z, axis->z);
    input_sync(mma8452->input_dev);
    mmaprintkd("Gsensor x==%d  y==%d z==%d\n",axis->x,axis->y,axis->z);
}

      接下来我们主要就是对以上代码进行调试了,这个时候分清楚坐标系就可以了,横屏状态下水平方向为X轴,竖直方向为Y轴,指向人的是Z轴,绕X轴旋转,gsensor方向不正确的则调试input_report_abs(mma8452->input_dev, ABS_X, axis->x);绕Z轴旋转,方向不对的调试input_report_abs(mma8452->input_dev, ABS_Z, axis->z);在同一个平面内旋转,方向不对的调试   input_report_abs(mma8452->input_dev, ABS_Y, axis->y);各参数有正负之分,以及参数之间的交换,调试也就无非是这些组合了,这个就不必多说了。


你可能感兴趣的:(c,struct,report,input)