用户级别驱动
为了允许app开发人员注册新的设备驱动到framework,Androidthings介绍了用户级别驱动的概念,用户级别的驱动是一个继承于已经存在的Android framework服务并且需要app来注册的组件(本质是service),他们允许所有的app注入硬件事件(行为)到framework,其他的app可以通过标准的api来访问获取信息。
注意:在应用层不能够定制linux内核和硬件抽象层级别的设备驱动(核心级别的驱动)来给设备添加新的功能,这个也好理解,Android的碎片化很严重而且没有好的办法去解决,现在Androidthings刚起步,控制核心层只有google内部可以修改,用户只能在app去处理。
优点
在许多app中,使用外设io直接和外部设备进行通信是足够的,然而,将你的设备和Android framework的交互封装成为框架还是很有益处的。
可移植性
android framework可以针对设备的驱动实现不加任何额外的配置就可以在多个不同样的板子上运行(必须Androidthings支持的板子),所以基于Android framework的封装框架也具有可移植性。
可复用性
你可以把已经存在的处理你的特殊硬件实现的Android 代码片段和lib包毫无修改和分支的复用到你的application中去
集成
android通常集合各种各样的服务数据到一起处理后将处理后的数据给app,或者创立一个虚拟的数据集,用户级别的处理对此很有帮助(比如加速度传感器和地理传感器需要一块使用来做处理,数据复合处理就可以在这里实现)
综上用户级别驱动的结构图是:
设备驱动类型
GPS
gps给app提供了高精度物理定位信息,用户级别驱动允许framework获取到其他的定位方式(wifi或者google的FusedLocationProviderApi(混合定位服务,google提供的一种定位服务))的结果和来自gps设备的数据进行继承(普通app开发中定位也是这样实现的,只是现在的ap开发中多是集成高德或者百度的定位sdk,其内部也是这样实现)
HID(Human Interface Devices)用户交互设备
HID提供给app用户的输入,触摸、键盘和游戏控制器等都能够提供这类输入,输入用户驱动让设备和增强的输入框架api(比如手势支持和拖拽)互相影响。
传感器
传感器测量和上报周边物理环境的情况,Android的传感器框架实现了传感器融合(将来自多个传感器的不成熟数据转换成为一个虚拟的传感器),这个虚拟传感器是一个普通的运动传感器,比如加速度传感器和陀螺仪传感器(这两个并不是真正的物理传感器。学习了),通过用户驱动链接传感器到framework允许提供给app融合后的数据。