高通从SDM845平台开始,Sensor使用新的架构SEE(Sensors Execution Environment),和之前架构不同,新的架构有着太多的优点。
一、软件框图
二、新旧框架对比
从上图可以看到,新架构简化太多,SEE充当了Core层的重要角色。负责传送request,接收event。
三、SEE框架改进
四、设计概念
- 框架组件按功能模块化
- 集成至框架的所有实体均建模为传感器或服务
- 传感器提供异步数据和事件
- 服务是用于同步函数调用的统一API
- 消息格式根据数据类型定义
- 所有加速度计均支持在sns_acel.proto中定义的同一接口
- 各传感器的唯一标识符(SUID)
- 例如,BMA150为SUID X;LIS3DH为SUID Y;QTI Gravity为SUID Z
- 支持复制传感器硬件
- 传感器决定并发布所有属性
- 供客户端使用信息;ORD、操作模式、功耗等
- 未来的灵活性
- 动态加载传感器驱动程序和算法
五、传感器之间的通信
说明:
- 传感器之间各个方向的通信均通过请求和事件消息执行
- 这些消息使用nanoPB生成器、编码器和解码器在协议区格式中定义
- 缓冲区长度、消息ID和时间戳(位于事件中)在由SEE框架管理的元数据内进行通信
- 发送的请求消息用于启用、禁止和/或配置数据流
- 请求消息始终针对特定的SUID
- 当目标传感器接收到消息后,就会将其发送至传感器实例进行适当处理
- 事件消息由传感器实例异步发送到其注册的客户端,这些客户端可以是其他传感器或者传感器实例
六、传感器和传感器实例
- 每个传感器可以实例化一个或者多个传感器实例
- 每个传感器实例运行在特定的配置环境中
- 对传感器数据的任何请求,都将创建一个传感器实例或者共享现有实例
- 传感器实例根据传感器确定的结果按需创建
- 传感器完全管理其相应实例的生命周期和配置,并负责向其客户端发送配置更新和初始状态事件
- 强烈建议厂商使用尽可能少的实例为尽可能多的客户端请求提供服务
- 由实例生成的数据流会发送至所有活动客户端
- 单个传感器实例可以由多个传感器共享和配置
- 这种操作模式通常适用于硬件传感器组合驱动程序,其中传感器表示支持的数据类型,传感器实例是硬件通信和配置的唯一模块。
七、相关API
- API 在以下文件中定义:
- slpi_proc\ssc\inc\sns_sensor.h
- slpi_proc\ssc\inc\sns_sensor_instance.h
- slpi_proc\ssc\inc\sns_register.h
- proto 文件包含协议缓冲区消息定义和文档:
- 标准消息定义位于 slpi_proc\ssc\sensors\pb\sns_std_*.proto
- sns_std.proto – 包含框架定义的消息 ID、标准请求消息、批处理规范、属性请求和事件以及错误事件消息
- sns_std_sensor.proto – 包含请求的消息 ID、标准传感器的事件 API、流传输请求和事件消息、传感器样本状态类型、 标准属性 ID、通用属性类型和物理传感器配置事件消息
- sns_std_type.proto – 包含通用 API 类型定义,如传感器 UID 消息、属性事件和值消息以及通用错误类型
- sns_std_event_gated_sensor.proto – 包含事件门控传感器的 API,如配置消息和 API 文档
- 物理传感器特定的 API 定义和文档位于传感器特定的 .proto 文件中,例如 sns_accel.proto、sns_proximity.proto、sns_motion_detect.proto 等
- 标准消息定义位于 slpi_proc\ssc\sensors\pb\sns_std_*.proto
- 平台传感器 API 定义和文档位于 \<root>\ssc\sensors\pb\。
- slpi_proc\ssc\sensors\pb\sns_timer.proto
- slpi_proc\ssc\sensors\pb\sns_interrupt.proto
- slpi_proc\ssc\sensors\pb\sns_async_com_port.proto
- SUID、注册表、诊断和 DAE 的框架相关 API 在以下文件中定义:
- slpi_proc\ssc\framework\suid_sensor\pb\sns_suid.proto
- slpi_proc\ssc\framework\registry\pb\sns_registry.proto
- slpi_proc\ssc\framework\pb\sns_diag.proto
- slpi_proc\ssc\framework\dae_sensor\pb\sns_dae.proto
- 测试传感器
- 标准传感器数据流传输测试位于 slpi_proc\ssc\sensors\test