gsensor在sleep过程中不能正常关闭的bug解决
来源:互联网 发布:社交软件的英文 编辑:程序博客网 时间:2024/05/22 14:46
sensor在启动sleep后, 不能正常关闭的bug分析和解决
今天jwisp测试代码发现, 机器sleep后, sensor并没有关闭, 而是继续不断的轮询取得硬件数据, 并上报上来. 这样会造成机器在sleep过程中, 仍然在使用电量.
为了解决这个问题, 我们来简单分析分析HAL层的代码.
通过实验, jwisp发现, sleep和唤醒的两个动作, 对应其调用的是各个sensor自己的enable方法()
我们看一下代码:
int GravitySensor::enable(int32_t, int en) { int flags = en ? 1 : 0; if (flags != mEnabled) { int fd; strcpy(&input_sysfs_path[input_sysfs_path_len], "enable"); fd = open(input_sysfs_path, O_RDWR); if (fd >= 0) { char buf[2]; int err; buf[1] = 0; if (flags) { buf[0] = '1'; mEnabledTime = getTimestamp() + IGNORE_EVENT_TIME; } else { buf[0] = '0'; } err = write(fd, buf, sizeof(buf)); close(fd); mEnabled = flags; setInitialState(); return 0; } return -1; } return 0;}
按下电源键, 机器进入睡眠, 则传入的en为0, mEnabled为当前sensor开启状态, 此时为1
若按下电源键唤醒机器, 则en = 1, mEnabled = 0
将enable字符串copy到input_sysfs_path字符串后, 此时在后面操作的打开和关闭的就是enable节点了
然后fd打开, 用buf往fd路径下的节点中写值, 若打开则写1, 若关闭则写0.
然后将mEnabled的状态值设为flags给定的状态值.
最后返回0
由于是从三星的sensor代码移植过来的构建成的HAL. 所以具体的情况还是有点不一样的. 经过修改后, 终于可用正常在jwisp的测试机上正常work了
下面附上修改后的代码:
int GravitySensor::enable(int32_t, int en) { int flags = en ? 1 : 0; if (flags != mEnabled) { if (flags) { data_fd = open(input_sysfs_path, O_RDWR); mEnabledTime = getTimestamp() + IGNORE_EVENT_TIME; } else { close(data_fd); } mEnabled = flags; } return 0;}
其中data_fd为基类打开和关闭轮询操作的句柄
- gsensor在sleep过程中不能正常关闭的bug解决
- FlashBuilder4.7非正常关闭导致不能启动的解决
- FlashBuilder4.7非正常关闭导致不能启动的解决
- 用Authid Current_User 定义的建表过程,过程放在JOB中不能正常运行
- 解决Select2控件不能在jQuery UI Dialog中不能搜索的bug
- 解决ReportViewer在CHROME中不能正常显示
- 解决 pplive链接代码在.net创建的页面中不能正常运行
- 在.NET中英文不能正常换行的解决
- 项目中一个Bug的解决过程
- 解决公司oracle数据库服务器,在不能上网的情况下数据库也能正常的在局域网中使用
- zz Centos中ping正常,yum不能使用的解决
- 解决ACE_Proactor中psudo_task不能正常结束的问题
- 我的win7中cmd不能正常使用,如何解决
- 解决Delphi的TAnimate控件的Common AVI在Vista以后版本中不能正常工作的问题
- oracle 不能正常关闭
- 解决tomcat启动jmx远程管理后不能正常关闭问题
- EasyCameraPro在直播过程中不发送START_STREAM_ACK响应的bug解决
- aspnet的menu控件在ie8中不能正常显示
- BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
- javaSe加强
- 禁用 tracker-miner-fs 的方法
- Imatest图像处理软件 Imatest Master
- wp theme modify
- gsensor在sleep过程中不能正常关闭的bug解决
- 分析一下android2.3中SensorBase.cpp的程序流程
- 使用nc检测udp端口是否可以正常通讯
- PHP FastCGI 的远程利用
- Stack实现
- 关于sensor在android系统原生应用中的使用(从应用层面验证sensor移植)
- VB导出EXCEL
- linux ipcs 命令详解
- UVa 10986 - Sending email (Dijkstra优化, SPFA)