如何增加gsensor和陀螺仪驱动

Gsensor调试方法_文档库
文档库最新最全的文档下载
当前位置: & Gsensor调试方法
Gsensor调试方法
Gsensor 调试方法-Allwinner
*/Gsensor 调试方法-Version0.1Allwinner Platform Author:tzx-leis tzx-hkz
----------------------------------------------------------------------------------------------------------------gsensor 原理:
gsensor 的作用是测量重力在x,y,z3个方向的分量。重力是1G=9.8。在gsensor driver 打印出的x,y,z值就是gsensor 对3个分量经ADC 转换后的原始值。
故在HAL 层中,对其会做一个转换。xx =9.8*(x/(2的n 次方)),n为ADC 的位数。dmard10为10bitADC,故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
Word文档免费下载:
gsensor MMA7660调试总结_IT/计算机_专业资料。计算机硬件MMA7660 是 MMA7455 的...可以直接用 cat 一个 脚本到 sysfs 的方法来配置其寄存器,这样就不用重新编译...GS702A_GSensor 调试手册 6.3 参数配置打开 fwmisc\config.xml,找到 GSensor 对应的配置,根据实际情况修改配置参数,一般 只需修改 position 参数,配置方法详见 5....MTK平台兼容多个G_SENSOR的调试_计算机软件及应用_IT/计算机_专业资料。MTK 平台...(&bma250_gsensor_driver)) { GSE_ERR(&failed to register driver&); ...gsensor驱动调用框架流程_建筑/土木_工程科技_专业资料。一、首先建立这样一个全局...整个 native 方法初始化过程如下:start(AndroidRuntime.cpp,938 行)&startReg(...行判断,然后调用抽象方法onOrientationChanged,因此,只要在子类 重新实现这个函数...gsensor MMA7660调试总结... 4页 免费 STM32 USB HID 11页 免费 MMA7660加...如下: ③调用 Sensor 模块的 get_sensors_list 方法获得传感器列表, 在调用 ...针对MTK平台下,LCD调试步... 9页 免费 MTK平台软件下载工具Mul... 19页 免费...同时在该文件中添加一个结构变量 //JayLin add for Gsensor struct lis331dl_...sensorManager.java 的具体通信是通过 JNI 调用 sensorManager.cpp 中的方法实现的...Gsensor struct lis331dl_platform_data lisGsensor_...sensorService.cpp 中相应的方法 android_int()会被...我再怎么调试驱动,那也只能适合一个游戏啊,你是否...gsensor/lis3dh 生成的 ko 可以通过 adb 推送和调试 2.1.3 一般移植中会...这里有两个方法是值得 注意的 __get_sensors_list 向 framework 提供支持的 ...仍用到了各种形形色色的传感器, 并且驱动基本上是重新编写和调试一遍, 然后重 ...选项配置 参考如下: &*& handle gsensor,compass,gyroscope,lsensor psensor ...gsensor驱动调用框架流程_文档下载
亿万文档 免费下载
当前位置: &
& gsensor驱动调用框架流程
gsensor驱动调用框架流程
一、首先建立这样一个全局的观念:
Android中sensor在Android系统架构中的位置及其工作。方框图如下:
从以上方框图中,可以看出Android中sensor在系统分为四层:驱动层(Sensor
Driver)、硬件抽象层(Native)、中间层(Framework)、应用层(Java)。硬件抽象层与中间层可以合并一起作为Framework层。
针对我们xx这里一个具体的Gsensor,下面将以具体的源码形式来讲解以上的这个系统框图。
二、驱动层(Sensor Driver Layer)
芯片ADXL345为GSensor,至于硬件的具体工作原理,须分析ADXL345的DataSheet。驱动源码位于:xx\custom\common\kernel\accelerometer\adxl345目录。
由于ADXL345是以I2C形式接口挂接到Linux系统,因此同时需要分析Linux的I2C子系统架构(略)。其源码位于:
xx\platform\xx\kernel\drivers\i2c
kernel\drivers\i2c
查看ADXL345.c文件,分析针对于其硬件工作原理的几个函数。硬件初始化:
[cpp] view plaincopy
1. static int adxl345_init_client(struct i2c_client *client, int reset_cali)
struct adxl345_i2c_data *obj = i2c_get_clientdata(client);
int res = 0;
adxl345_gpio_config();//配置GPIO口,这里由于不使用中断,所以将中断引脚配置成输入输出口。
res = ADXL345_CheckDeviceID(client); //检测设备ID,通过读ADXL345的DEVID寄存器
if(res != ADXL345_SUCCESS)
Word文档免费下载: (下载1-8页,共8页)
Android系统下sensor驱动架构简介及使用说明_计算机硬件及网络_IT/计算机_专业资料...手机事业部 3、内核配置 如果希望 SENSOR 自动兼容,可以选上所有 SENSOR,程序会...G-sensor driver 工作的大致流程: 系统开机后,先加载 i2c 总线驱动,然后加载设备驱动。 在设备驱动中的 init 函数中通过调用 i2c_add_driver(&lis331dl_i2c_...驱动文件添加路径,C 文件:MS_Code\chip_drv\source\c H 文件:MS_Code\chip...MS_Code\MS_MMI\source\mmi_app\app\game\game_3gt 框架:MS_Code\MS_MMI\...G-sensor driver 工作的大致流程: 系统开机后,先加载 i2c 总线驱动,然后加载设备驱动。 在设备驱动中的 init 函数中通过调用 i2c_add_driver(&lis331dl_i2c_...另外,当应用程序显 屏幕旋转时则不会旋转,见函数...行判断,然后调用抽象方法onOrientationChanged,因此,...[转帖]H桥电机驱动原理与... 5页 免费喜欢...驱动代码 a.Hwmsen alps/mediatek/kernel/drivers/hwmon/hwmsen/hwmsen_dev.c 为上图 hwmsen 部分, 提供 hwmsen_unlocked_ioctl 这个接口给上层调用,同时提供 ...G-sensor driver 工作的大致流程: 系统开机后,先加载 i2c 总线驱动,然后加载设备驱动。 在设备驱动中的 init 函数中通过调用 i2c_add_driver(&lis331dl_i2c_...Android包含一些C/C++库,被Android系统中不同组件使用,通过应用框架为开发者服务...Huawei Confidential Page 11 事件处理流程事件的定义:主要是从驱动层反馈上来的...Android包含一些C/C++库,被Android系统中不同组件使用,通过应用框架为开发者服务...Huawei Confidential Page 11 事件处理流程事件的定义:主要是从驱动层反馈上来的...usb id usb id厂商不同的设备驱动应该是相同的VID 不同 PID作完相应ID 更改后 windows driver也需要作相应的更改。 如adb使用,可加入usb_adb.ini即可。 初始...Android(108)
android2.3.4增加gsensor,供参考。
sensor:lsm330dlc(acc + gyr)
1、将lsm330dlc驱动代码放到drivers/input/misc目录下,修改此上当下的kconfig和Makefile文件分别增加如下字段:
config SENSORS_LSM330DLC
tristate &ST's family of MEMS sensor modules of LSM330DLC&
depends on I2C && INPUT && MACH_ZT6810
select INPUT_POLLDEV
This driver provides support for the LSM330DLC gyroscope and accelerator connected via I2C.
obj-$(CONFIG_SENSORS_LSM330DLC)+= lsm330dlc_acc.o lsm330dlc_gyr.o
2、对照硬件原理图,修改lsm330dlc.h中的相应中断IO及数据全能IO,如:
/*Xandy modify the accelerator and gyro interrupt pins @*/
#define INT1_GPIO_ACC 178
#define INT2_GPIO_ACC 179&
#define INT1_GPIO_GYR 181
#define INT2_GPIO_GYR 180&
/*Xandy add Sensors enable pin*/
#define SENSOR_EN_GPIO 38
3、修改BSP相应文件(既对应的board-xx.c文件),对lsm330dlc进行驱动注册(I2C总线),如:
#ifdef CONFIG_SENSORS_LSM330DLC
static struct i2c_board_info __initdata zt6810_i2c_LSM330DLC[] = {
&&&&&&&&&&&&&& I2C_BOARD_INFO(&lsm330dlc_acc&, 0x19),
&&&&& I2C_BOARD_INFO(&lsm330dlc_gyr&, 0x6B),
static int __init zt6810_i2c_init(void)
omap_register_i2c_bus(1, 2600, zt6810_i2c_boardinfo,
ARRAY_SIZE(zt6810_i2c_boardinfo));
/* Bus 2 is used for Battery ckeck(bq27410) */
#ifdef CONFIG_BATTERY_MAX17049
omap_register_i2c_bus(2, 100, zt6810_i2c_MAX17049, ARRAY_SIZE(zt6810_i2c_MAX17049));
omap_register_i2c_bus(2, 100, NULL, 0);
/* projector don't work reliably with 400kHz */
#ifdef CONFIG_SENSORS_LSM330DLC&
omap_register_i2c_bus(3, 200, zt6810_i2c_LSM330DLC, ARRAY_SIZE(zt6810_i2c_LSM330DLC));
内核编译通过之后,将uImage烧录到样机,如果不出意外,在串口终端进入相应目录,ls一下将会看到如下内容:
可以看出acc在I2C总线注册成功,相应的I2C总线号及address为3-0019,而gyr则为3-006B
4、在串口终端里输入如下命令:
# cat /proc/bus/input/devices
将会得到如下信息:
# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name=&gpio-keys&
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/gpio-keys/input/input0
H: Handlers=kbd event0
B: KEY=4 0 0 0
I: Bus=0019 Vendor=0001 Product=0001 Version=0003
N: Name=&TWL4030 Keypad&
P: Phys=twl4030_keypad/input0
S: Sysfs=/devices/platform/omap/omap_i2c.1/i2c-1/1-004a/twl4030_keypad/input/input1
H: Handlers=kbd event1
B: EV=100013
B: KEY=800 caa
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name=&ADS7846 Touchscreen&
P: Phys=spi1.0/input0
S: Sysfs=/devices/platform/omap2_mcspi.1/spi1.0/input/input2
H: Handlers=mouse0 event2
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name=&twl4030_pwrbutton&
P: Phys=twl4030_pwrbutton/input0
S: Sysfs=/devices/platform/omap/omap_i2c.1/i2c-1/1-0049/twl4030_pwrbutton/input/input3
H: Handlers=kbd event3
B: KEY= 0 0
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name=&lsm330dlc_acc&
S: Sysfs=/devices/platform/omap/omap_i2c.3/i2c-3/3-0019/input/input4
H: Handlers=js0 event4
B: ABS=100 107
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name=&lsm330dlc_gyr&
S: Sysfs=/devices/platform/omap/omap_i2c.3/i2c-3/3-006b/input/input5
H: Handlers=js1 event5
这里列出的是目前系统已经注册的input设备的一些信息,最后两项就是之前加入的sensor(acc + gyr)注册的相应input设备
为什么sensor会注册成input设备,看看相应的驱动里有如下内容:
static int lsm330dlc_acc_input_init(struct lsm330dlc_acc_data *acc)
INIT_DELAYED_WORK(&acc-&input_work, lsm330dlc_acc_input_work_func);
acc-&input_dev = input_allocate_device();
if (!acc-&input_dev) {
err = -ENOMEM;
dev_err(&acc-&client-&dev, &input device allocation failed\n&);
goto err0;
acc-&input_dev-&open = lsm330dlc_acc_input_
acc-&input_dev-&close = lsm330dlc_acc_input_
acc-&input_dev-&name = LSM330DLC_ACC_DEV_NAME;
//acc-&input_dev-&name = &accelerometer&;
acc-&input_dev-&id.bustype = BUS_I2C;
acc-&input_dev-&dev.parent = &acc-&client-&
input_set_drvdata(acc-&input_dev, acc);
set_bit(EV_ABS, acc-&input_dev-&evbit);
/* next is used for interruptA sources data if the case */
set_bit(ABS_MISC, acc-&input_dev-&absbit);
/* next is used for interruptB sources data if the case */
set_bit(ABS_WHEEL, acc-&input_dev-&absbit);
input_set_abs_params(acc-&input_dev, ABS_X, -G_MAX, G_MAX, FUZZ, FLAT);
input_set_abs_params(acc-&input_dev, ABS_Y, -G_MAX, G_MAX, FUZZ, FLAT);
input_set_abs_params(acc-&input_dev, ABS_Z, -G_MAX, G_MAX, FUZZ, FLAT);
/* next is used for interruptA sources data if the case */
input_set_abs_params(acc-&input_dev, ABS_MISC, INT_MIN, INT_MAX, 0, 0);
/* next is used for interruptB sources data if the case */
input_set_abs_params(acc-&input_dev, ABS_WHEEL, INT_MIN, INT_MAX, 0, 0);
err = input_register_device(acc-&input_dev);
if (err) {
dev_err(&acc-&client-&dev,
&unable to register input device %s\n&,
acc-&input_dev-&name);
goto err1;
input_free_device(acc-&input_dev);
我们在终端里再输入如下命令:
# getevent
将得到如下信息:
# getevent
could not get driver version for /dev/input/mice, Not a typewriter
add device 1: /dev/input/event2
& name:&&&& &ADS7846 Touchscreen&
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 2: /dev/input/event0
& name:&&&& &gpio-keys&
add device 3: /dev/input/event5
& name:&&&& &lsm330dlc_gyr&
could not get driver version for /dev/input/js1, Invalid argument
add device 4: /dev/input/event4
& name:&&&& &lsm330dlc_acc&
could not get driver version for /dev/input/js0, Invalid argument
add device 5: /dev/input/event1
& name:&&&& &TWL4030 Keypad&
add device 6: /dev/input/event3
& name:&&&& &twl4030_pwrbutton&
/dev/input/event4: 000001
/dev/input/event4:
/dev/input/event4: 0003df
/dev/input/event4: 000000
/dev/input/event4:
/dev/input/event4:
/dev/input/event4: 0003e2
/dev/input/event4: 000000
/dev/input/event4: 000002
/dev/input/event4:
/dev/input/event4: 0003e5
/dev/input/event4: 000000
/dev/input/event4: 000001
/dev/input/event4:
/dev/input/event4: 0003df
/dev/input/event4: 000000
/dev/input/event4:
/dev/input/event4:
/dev/input/event4: 0003e4
getevent命令是用来获取系统输入事件的,很容易看出,当前系统一直有event4的事件发生,对照上面的信息:
add device 4: /dev/input/event4
& name:&&&& &lsm330dlc_acc&
可见前面加入的sensor(acc)已经开始工作了并不停地往系统上报当前的加速度事件!
如果正常配置且编译通过了sensor的驱动,但无法得到这些信息,那么你就有必要查查你的硬件是否正常了,如:芯片是不是一致;有没有虚焊,最后找个示波器挂一下,看看相应的I2C波形正不正常!
5、完成了上面的工作,并不等于完成了全部的工作,现在虽然sensor已经开始工作了,但当你进入到具有重力感应的界面,如:系统设置。
发现UI目前是不会转动的,或者你下一个sensor测试工具,也是一样的。
这是因为在HAL里面,还没有打通sensor事件上报的通道,下面来看看HAL里面的代码要如何修改。
sensor HAL层的代码在
hardware/ti/omap3/libsensors
目录下面。
先来看看sensors.cpp这个文件。这里是sensor进行HAL层封装的,在这里可以看到有
struct sensors_module_t HAL_MODULE_INFO_SYM = {
&&&&&&& common: {
&&&&&&&&&&&&&&& tag: HARDWARE_MODULE_TAG,
&&&&&&&&&&&&&&& version_major: 1,
&&&&&&&&&&&&&&& version_minor: 0,
&&&&&&&&&&&&&&& id: SENSORS_HARDWARE_MODULE_ID,
&&&&&&&&&&&&&&& name: &Sensor module&,
&&&&&&&&&&&&&&& author: &Texas Instruments Inc.&,
&&&&&&&&&&&&&&& methods: &sensors_module_methods,
&&&&&&& },
&&&&&&& get_sensors_list: sensors__get_sensors_list,
这是HAL层封装的一个标准结构,我们主要来看看下面这段代码:
sensors_poll_context_t::sensors_poll_context_t()
mSensors[accel] = new AccelSensor();
mPollFds[accel].fd = mSensors[accel]-&getFd();
mPollFds[accel].events = POLLIN;
mPollFds[accel].revents = 0;
mSensors[gyro] = new GyroSensor();
mPollFds[gyro].fd = mSensors[gyro]-&getFd();
mPollFds[gyro].events = POLLIN;
mPollFds[gyro].revents = 0;
int wakeFds[2];
int result = pipe(wakeFds);
LOGE_IF(result&0, &error creating wake pipe (%s)&, strerror(errno));
fcntl(wakeFds[0], F_SETFL, O_NONBLOCK);
fcntl(wakeFds[1], F_SETFL, O_NONBLOCK);
mWritePipeFd = wakeFds[1];
mPollFds[wake].fd = wakeFds[0];
mPollFds[wake].events = POLLIN;
mPollFds[wake].revents = 0;
可以看出,这里new了两个sensor设备,一个是ACC,另外一个则是GYR!进入到accelSensor.cpp,在下面这个构造函数里:
AccelSensor::AccelSensor()
&&& : SensorBase(NULL, &lsm330dlc_acc&),
&&&&& mEnabled(0),
&&&&& mInputReader(4),
&&&&& mHasPendingEvent(false)
&&& memset(&mPendingEvent, 0, sizeof(mPendingEvent));
&&& mPendingEvent.version = sizeof(sensors_event_t);
&&& mPendingEvent.sensor = ID_A;
&&& mPendingEvent.type = SENSOR_TYPE_ACCELEROMETER;
mPendingEvent.acceleration.status = SENSOR_STATUS_ACCURACY_HIGH;
&&& if (data_fd)
&&&&&&& strcpy(input_sysfs_path, ACCEL_SENSOR_NAME);
&&&&&&& input_sysfs_path_len = strlen(input_sysfs_path);
&&&&&&& enable(0, 1);
黄色背景标注的是需要修改的,其中ACCEL_SENSOR_NAME的宏定义相应如下:
/*Xandy add AccelSensor name and GyroSensor name macro definition*/
#ifdef CONFIG_SENSOR_LSM330DLC
#define ACCEL_SENSOR_NAME&/sys/bus/i2c/drivers/lsm330dlc_acc/3-0019/&
#define GYRO_SENSOR_NAME &/sys/bus/i2c/drivers/lsm330dlc_gyr/3-006b/&&&
#define ACCEL_SENSOR_NAME &/sys/bus/i2c/drivers/lis331dlh/1-0018/&
#define GYRO_SENSOR_NAME &/sys/bus/i2c/drivers/l3g4200dh_i2c/1-0068/&
其中CONFIG_SENSOR_LSM330DLC这个宏开关我在相应的.mk里作了如下定义:
# Xandy add macro define for accel and gyro sensors
ifeq ($(SENSOR_LSM330DLC), true)
LOCAL_CFLAGS += -DCONFIG_SENSOR_LSM330DLC
而SENSOR_LSM330DLC则在相应工程(device目录下对应你此时的vendor)的BoardConfig.mk里作如下定义:
#Xandy add accel and gyro sensors
BOARD_HAS_SENSOR := true
SENSOR_LSM330DLC := true
这些其实都是宏定义及编译开关设置的问题,这样做的目的是方便不同工程(vendor)之间的切换及添加新的设备支持
GYR HAL的修改和ACC的一样,这里不多提了!
经过这些修改之后,用mm编译相应的lib,并将lib通过adb push 到样机的文件里对应目录下,重启系统之后如果一切正常,现在进入到有UI旋转的界面,就会起作用了,
但是,很有很可此时的旋转方向和你运行的方向是不一致的,那么你还得修改一下Sensor HAL中sensors.h里面的如下宏:
#ifdef CONFIG_SENSOR_LSM330DLC
#define EVENT_TYPE_ACCEL_X&&&&&&&&& REL_X
#define EVENT_TYPE_ACCEL_Y&&&&&&&&& REL_Y
#define EVENT_TYPE_ACCEL_Z&&&&&&&&& REL_Z
#error you must define ACCEL X Y Z
#ifdef CONFIG_SENSOR_LSM330DLC
#define EVENT_TYPE_GYRO_X&&&&&&&&&& REL_X//REL_RX
#define EVENT_TYPE_GYRO_Y&&&&&&&&&& REL_Y//REL_RY
#define EVENT_TYPE_GYRO_Z&&&&&&&&&& REL_Z//REL_RZ
#error you must define GYRO X Y Z
修改这些 x、y、z的定义,例如改成如下顺利:
#ifdef CONFIG_SENSOR_LSM330DLC
#define EVENT_TYPE_GYRO_X&&&&&&&&&& REL_Z
#define EVENT_TYPE_GYRO_Y&&&&&&&&&& REL_X
#define EVENT_TYPE_GYRO_Z&&&&&&&&&& REL_Y
#error you must define GYRO X Y Z
具体顺利怎样,根据你的硬件摆放位置来定
至此sensor的调试就基本上完成了,如果还有什么要修改的,那就是一些微调了,如灵敏度等
From:&/kf/471.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1545744次
积分:14372
积分:14372
排名:第876名
原创:166篇
转载:381篇
译文:16篇
评论:148条
(1)(1)(1)(1)(1)(2)(1)(1)(1)(4)(13)(1)(10)(4)(5)(1)(7)(36)(16)(25)(20)(12)(23)(6)(4)(15)(2)(21)(11)(6)(1)(5)(2)(1)(4)(1)(1)(2)(6)(6)(1)(1)(1)(1)(1)(1)(9)(8)(3)(1)(5)(7)(1)(2)(3)(6)(6)(4)(1)(1)(2)(25)(1)(6)(3)(3)(3)(3)(11)(5)(23)(17)(42)(35)(33)(7)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'Gsensor调试方法_文库下载
1亿文档 免费下载
当前位置: &
& Gsensor调试方法
Gsensor调试方法
Gsensor调试方法-使用于平板
*/Gsensor调试方法-Version0.1AllwinnerPlatformAuthor:tzx-leistzx-hkz
----------------------------------------------------------------------------------------------------------------gsensor原理:
gsensor的作用是测量重力在x,y,z3个方向的分量。重力是1G=9.8。在gsensordriver打印出的x,y,z值就是gsensor对3个分量经ADC转换后的原始值。
故在HAL层中,对其会做一个转换。xx=9.8*(x/(2的n次方)),n为ADC的位数。dmard10为10bitADC,故2的n次方为4*256=1024。而d06是7bit。
----------------------------------------------------------------------------------------------------------------本文主要从gsensor的驱动层、HAL层、上层校准APK的添加三方面来阐述gsensor调试的简单方法。
----------------------------------------------------------------------------------------------------------------1,驱动层:
文件路径:\lichee\linux-3.4\drivers\gsensor
驱动层是关键,有没有数据上报,是着整个gsensor是否能正常工作的基础。
a),确保驱动模块已经加载(默认编译为模块方式)
$adbshell进入小机
$lsmod查看是否gsensor对应的模块。
若没有加载,则通过cat/proc/kmsg&gsensor.log查看开机log中加载失败原因进行分析。
b),利用getevent查看驱动是否有数据上报。
$adbshell进入小机
$getevent-p列出所有的input设备,查看对应的event0还是event1
$getevent/dev/input/event1查看数据是否连续不断上报?
若没有数据上报,则分析驱动,打印report处上报的值。
通常出现以上问题,常为I2C通信失败,在软件端可以通过驱动log看出。
此时先检查I2C地址是否正确,然后重点检查硬件I2C是否连好,可能是由于虚焊或者芯片损坏导致。c),辅助查看gsensor属性,获取gsensor设备名
$adbshell进入小机
$cd/sys/devices/sw_device/gsensor(文件目录不尽相同,可从驱动文件中获知实际路径)
$cat即可获取gsensorname
通常还有其他的属性可以辅助查看,以详细了解gsensor的状态,如enable、delay等属性。
----------------------------------------------------------------------------------------------------------------2,HAL层
文件路径:\android\device\softwinner\common\hardware\libsensors
Word文档免费下载:(下载1-3页,共3页)
由于芯片 datasheet 上没有说明如何初始化,对于不知道如何初始化的芯片,可以用“灌寄存器”的 方法来尝试。所谓灌寄存器,就是在向 sysfs 注册 driver 的时候提供...鹤生 发布于
09:45 点击: 669 次 系统原来用的是 BOSCH_BMA222 的 gsensor, 现在要求换成使用 MMA7660, 我们来 看一下怎样增加驱动和调试...模块体系结构、数据结构等; 第二部分,第 5、6 章,介绍 G-sensor 的内核部分的移植及 android 部分的配置; 第三部分,第 7 章介绍 G-sensor 的相关调试方法...许继电气股份有限 公司装置产品开发部 调试方法 FCK-801A 微机测控装置 0XJ 655 160 共 4 页第 1 页 1 适用范围 本调试方法适用于 FCK-801A 微机测控装置...行判断,然后调用抽象方法onOrientationChanged,因此,只要在子类 重新实现这个函数...( 1 ) 调节阀阀门定位器AVP100调试方法调节阀阀门定位器AVP100调试方法隐藏&& 内部开关的自整定 操作步骤: 操作步骤: 1、调节过滤减压阀气源至执行结构的额定值,输入 ...sensorService.java 的具体通信是通过 JNI 调用 sensorService.cpp 中的方法实现 ...我再怎么调试驱动,那也只能适合一个游戏啊,你是否知 道里面的原因啊 xie_jack...文档针对 sensor hal 层的使用方法进行讲解,为达到添加新的模组以及 sensor 的使用。 项目中 sensor 开发,维护以及使用人员应认真阅读该文档。 1.4 文档介绍意) ...Pro-A10开发板功能调试参考手册_信息与通信_工程科技_专业资料。Pro-A10开发板从全志服务器下来源码编译,并不能找到 Pro-A10 开发板对应的 crane-evb-v13 ...

我要回帖

更多关于 gsensor 碰撞检测算法 的文章

 

随机推荐