android AP侧通过sensor_class挂载sensor的一种方案
来源:互联网 发布:仿美文网整站源码 编辑:程序博客网 时间:2024/06/06 04:15
1.引言
1.1背景
目前android上对sensor的处理是将其挂载到类似于sensor-hub的独立处理单元上与AP分离,这样便于解决功耗问题。高通平台也类似的将sensor挂在了adsp上,但特定需求下还是希望sensor能够挂载到AP下,并且对上层隐藏这种差异,可以使用相同的处理流程。本文介绍一种使用以input设备为基础的sensor_class抽象类在AP侧挂载sensor的方法。(使用高通MSM8937平台)
2.添加sar sensor
2.1 在kernel中使用sensor_class注册sensor
2.1.1添加对sensors_class的支持
sensor_class是google对ap侧sensor设备的抽象,并不是内核自带的。某些android版本可能没有kernel\drivers\sensors\sensors_class.c文件,需要下载最新代码merge此文件。
2.1.2注册input设备
首先需要注册标准的input设备,使用标准方法注册即可,注册后可以在/dev/input中获得相应节点,读取key event
input_top = input_allocate_device();__set_bit(EV_ABS, input_top->evbit);input_set_abs_params(input_top,ABS_DISTANCE, -1, 100, 0, 0);input_top->name = "SX9310 Cap Touchtop";input_register_device(input_top);
2.1.3注册sensors_class设备
a,定义新sensor
static struct sensors_classdev sensors_capsensor_top_cdev= { .name= "capsense_top", .vendor= "semtech", .version= 1, .type= 65552, //sensor type自已定义,不能与已有冲突即可 .max_range= "5", .resolution= "5.0", .sensor_power= "3", .min_delay= 0, /* in microseconds */ .fifo_reserved_event_count= 0, .fifo_max_event_count= 0, .enabled= 0, .delay_msec= 100, .sensors_enable= NULL, .sensors_poll_delay= NULL,};static struct sensors_classdevsensors_capsensor_bottom_cdev = { .name= "capsense_bottom", .vendor= "semtech", .version= 1, .type= 65552, .max_range= "5", .resolution= "5.0", .sensor_power= "3", .min_delay= 0, /* in microseconds */ .fifo_reserved_event_count= 0, .fifo_max_event_count= 0, .enabled= 0, .delay_msec= 100, .sensors_enable= NULL, .sensors_poll_delay= NULL,};
b,使用sensor_class中的注册函数注册sensor设备
int sensors_classdev_register(struct device*parent, structsensors_classdev *sensors_cdev)
sensor device是基于input devie的,因此父设备为2.1.2中注册的input.dev注册sensor device。注册后的表现为/sys/class/sensor中出现了我们添加的设备,hal层将通过对/sys/class/sensor中节点的读取来获取设备
2.2 hal层添加库对sensor event进行转换
a,hal的主要功能
读取/sys/class/sensor中各个sensor的节点,向android framwork提供sensor信息
将key event转换成android framwork层的sensor event
b,向系统中加入新库
高通sensor架构中对sensor相关的库写在/etc/sensors/hals.conf文件中,需要修改此文件添加新库。其中库的加载过程位于hardware/libhardware/modules/sensors/multihal.cpp文件中。
2.3 app层对新类型sensor的使用
private List<Sensor> sarSensor; //获取sensor@Overridepublic void onCreate(BundlesavedInstanceState){ sm= (SensorManager)getSystemService(SENSOR_SERVICE); sarSensor= sm.getSensorList(65552);//65552是在kernel中新增sensor时指定的} //注册sensor@Overrideprotected void onResume() { Iterator<Sensor>it = sarSensor.iterator(); while(it.hasNext()) { Sensorsr = it.next(); Log.d(TAG,"found sensor:" + sr.getName() + sarSensor.size()); sm.registerListener(this,it.next(), SensorManager.SENSOR_DELAY_FASTEST); Log.d(TAG,"register sensor:" + sr.getName()); }} public void onSensorChanged(SensorEventevent) { synchronized(this) { inttype = event.sensor.getType(); Log.d(TAG,"onSensorChanged: " + type+ event.sensor.getName() +event.values[0]);}
- android AP侧通过sensor_class挂载sensor的一种方案
- [sensor] android的sensor架构
- Ubuntu通过AP共享WiFi给Android的方法
- Android网络电台的一种实现方案
- Android应用程序退出的一种方案
- Android 屏幕适配的一种方案
- Android中优化listview的一种方案
- Android Sensor 的实现
- Android Sensor的使用
- SSO的一种方案
- Android网络电台的一种实现方案(歌醉原创)
- Android网络电台的一种实现方案(歌醉原创)
- Android客户端和服务器交换数据的一种方案
- 关于监听android 软键盘的一种可行方案
- 关于Android圆形图片的一种优化方案
- Android 本地HTML屏幕适配的一种方案
- Android -- 一种动态为apk写入信息的方案
- FitScreen-Android屏幕适配的一种方案
- tomcat启动和停止时java.net.ConnectException:Connection refused:connect
- 如何在64位的Win10系统下安装.NET Framework 3.0
- 滴滴一面面经
- jQuery的属性与样式
- python-深拷贝和浅拷贝
- android AP侧通过sensor_class挂载sensor的一种方案
- Java解析网络数(Json)运用CloseableHttpClient
- 【Machine Learning】笔记:Transfer Learning
- C++引用:&
- Spark 2.0 DataFrame map操作中Unable to find encoder for type stored in a Dataset.问题的分析与解决
- Win10专业版+VS2017+OpenCV3.3.0环境搭建
- 【2017.9.5】研究生,新的起点,新的开始
- Hexo默认的主题更改
- java面向对象(二)之继承