sensor__HAl分析(头文件)

Android6.0 Sensor架构和问题分析 本文在借鉴网友的资料后再重新梳理了一遍,都是站在前人的基础、巨人的肩膀上再次总结分析出来的,仅供大家参考! 本文主要描述了在Android 6.0系统、MTK6755平台上sensor相关软硬件的体系架构的分析理解。 一、系统架构(Architecture) 1.1 Android体系架构图   图1.1 图1.1是Android系统的典型五层体系架构图,分别为Applicatio 阅读详情

首先看下sensor的hal层头文件:hardware\libhardware\include\hardware

typedef struct {
    union {
        float v[3];
        struct {
            float x;
            float y;
            float z;
        };
        struct {
            float azimuth;
            float pitch;
            float roll;
        };
    };
    int8_t status;
    uint8_t reserved[3];
} sensors_vec_t;

/**
 * Union of the various types of sensor data
 * that can be returned.
 */
typedef struct sensors_event_t {
    /* must be sizeof(struct sensors_event_t) */
    int32_t version;

    /* sensor identifier */
    int32_t sensor;

    /* sensor type */
    int32_t type;

    /* reserved */
    int32_t reserved0;

    /* time is in nanosecond */
    int64_t timestamp;

    union {
        float           data[16];

        /* acceleration values are in meter per second per second (m/s^2) */
        sensors_vec_t   acceleration;

        /* magnetic vector values are in micro-Tesla (uT) */
        sensors_vec_t   magnetic;

        /* orientation values are in degrees */
        sensors_vec_t   orientation;

        /* gyroscope values are in rad/s */
        sensors_vec_t   gyro;

        /* temperature is in degrees centigrade (Celsius) */
        float           temperature;

        /* distance in centimeters */
        float           distance;

        /* light in SI lux units */
        float           light;

        /* pressure in hectopascal (hPa) */
        float           pressure;

        /* relative humidity in percent */
        float           relative_humidity;
    };
    uint32_t        reserved1[4];
} sensors_event_t;



struct sensor_t;

/**
 * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
 * and the fields of this data structure must begin with hw_module_t
 * followed by module specific information.
 */
struct sensors_module_t {
    struct hw_module_t common;

    /**
     * Enumerate all available sensors. The list is returned in "list".
     * @return number of sensors in the list
     */
    int (*get_sensors_list)(struct sensors_module_t* module,
            struct sensor_t const** list);
};

struct sensor_t {
    /* name of this sensors */
    const char*     name;
    /* vendor of the hardware part */
    const char*     vendor;
    /* version of the hardware part + driver. The value of this field
     * must increase when the driver is updated in a way that changes the
     * output of this sensor. This is important for fused sensors when the
     * fusion algorithm is updated.
     */    
    int             version;
    /* handle that identifies this sensors. This handle is used to activate
     * and deactivate this sensor. The value of the handle must be 8 bits
     * in this version of the API. 
     */
    int             handle;
    /* this sensor's type. */
    int             type;
    /* maximaum range of this sensor's value in SI units */
    float           maxRange;
    /* smallest difference between two values reported by this sensor */
    float           resolution;
    /* rough estimate of this sensor's power consumption in mA */
    float           power;
    /* minimum delay allowed between events in microseconds. A value of zero
     * means that this sensor doesn't report events at a constant rate, but
     * rather only when a new data is available */
    int32_t         minDelay;
    /* reserved fields, must be zero */
    void*           reserved[8];
};


/**
 * Every device data structure must begin with hw_device_t
 * followed by module specific public methods and attributes.
 */
struct sensors_poll_device_t {
    struct hw_device_t common;

    /** Activate/deactivate one sensor.
     *
     * @param handle is the handle of the sensor to change.
     * @param enabled set to 1 to enable, or 0 to disable the sensor.
     *
     * @return 0 on success, negative errno code otherwise
     */
    int (*activate)(struct sensors_poll_device_t *dev,
            int handle, int enabled);

    /**
     * Set the delay between sensor events in nanoseconds for a given sensor.
     *
     * If the requested value is less than sensor_t::minDelay, then it's
     * silently clamped to sensor_t::minDelay unless sensor_t::minDelay is
     * 0, in which case it is clamped to >= 1ms.
     *
     * @return 0 if successful, < 0 on error
     */
    int (*setDelay)(struct sensors_poll_device_t *dev,
            int handle, int64_t ns);

    /**
     * Returns an array of sensor data.
     * This function must block until events are available.
     *
     * @return the number of events read on success, or -errno in case of an error.
     * This function should never return 0 (no event).
     *
     */
    int (*poll)(struct sensors_poll_device_t *dev,
            sensors_event_t* data, int count);
};

/** convenience API for opening and closing a device */

static inline int sensors_open(const struct hw_module_t* module,
        struct sensors_poll_device_t** device) {
    return module->methods->open(module,
            SENSORS_HARDWARE_POLL, (struct hw_device_t**)device);
}

static inline int sensors_close(struct sensors_poll_device_t* device) {
    return device->common.close(&device->common);
}

__END_DECLS

主要包括sensors_vec_t、sensors_event_t、sensors_module_t、sensor_t、sensors_poll_device_t几个结构

sensors_vec_t主要是上传的数据,里面包括一个union结构,包含各种上传数据的一个数据封装,都是三个float

sensors_event_t主要是以一个事件的形式上传从sensor获取的数据,里面也有一个union,包含的是各种各样的传感器的数据,其中type是sensor的类型,sensor是一个标识

sensors_module_t是hw_module_t的一个封装,提供一个get_sensors_list获取该平台可提供的所有sensor

sensor_t用来描述一个sensor

sensors_poll_device_t是hw_device_t的一个封装。提供了3个方法activate、setDelay、poll

activate用来启动和停止sensor

setDelay用来设置延时

poll用来监听sensor上是否有数据


Android: sensor 时间戳从sensor子系统到AP android层的变化 因为_offset_ns的存在,两个时间体系的转换没有那么简单,不知offset是不是个常量,还是每次开机都会变化?开机也有可能变化? void har::handle_sns_client_event(const sns_client_event_msg_sns_client_event& pb_event) { if (pb_event.msg_id() == SNS_HAR_MSGID_SNS_DATA) { sns_std_sensor_event pb_stream... 阅读详情

相关推荐

MPU6050 加速度计和陀螺仪传感器与 Arduino 的接口

虽然该模型并不能准确代表现实世界中加速度计传感器的构建方式,但它通常有助于理解为什么加速度计的输出信号通常以 ±g 为单位指定,或者为什么加速度计在静止时在 z 轴上的读数为 1g,或者在不同方向上您可以期望得到什么样的加速度计读数。该模块的核心是低功耗、低成本的 6 轴运动跟踪芯片 MPU6050,它将 3 轴陀螺仪、3 轴加速度计和数字运动处理器 (DMP) 集成到一个 4mm x 4mm 的微型芯片中。小时候,科学博览会上的陀螺仪总是让我们感到惊讶,因为它们以奇怪的方式移动,甚至似乎违背了重力。

sxstj的博客 9933

【Android】Sensor框架Framework层解读

Sensor整体架构    整体架构说明 黄色部分表示硬件,它要挂在I2C总线上 红色部分表示驱动,驱动注册到Kernel的Input Subsystem上,然后通过Event Device把Sensor数据传到HAL层,准确说是HAL从Event读 绿色部分表示动态库,它封装了整个Sensor的IPC机制,如SensorManager是客户端,SensorService是服务端,而...

weixin_34233856的博客 856

深入浅出 - Android系统移植与平台开发(十一) - Sensor HAL框架分析之一

1. Sensor的概念 Sensor即传感器,在当前智能手机上大量存在:G-Sensor、LightsSensor、ProximitySensor、TemperatureSensor等,其作为Android系统的一个输入设备,对于重视用户体验的移动设备来说是必不可少的。Sensor虽然是一个输入设备,但是它又不同于触摸屏,键盘,按键等这些常规的输入设备,因为Sensor的数据输入从传...

mr_raptor的专栏 2万+

Sensor Framework原理

1 总体调用关系图 Sensor 框架分为三个层次,客户度、服务端、HAL层,服务端负责从HAL读取数据,并将数据写到管道中,客户端通过管道读取服务端数据。下面简单解释类的功能 1.1客户端主要类 n         SensorManager.java 从android4.1开始,把SensorManager定义为一个抽象类,定义了一些主要的方法,类主要是应用

fe学习之旅 2430

Sensor系列之Sensor HAL层数据获取,基于Qualcomm平台

前面我们分析了Android Sensor HAL层源码分析(基于Qualcomm平台),该篇博文主要讲解了Sensor HAL的初始化,以及hal层是怎样获取所有sensor列表的。今天我们来进一步了解下sensor hal层的数据获取流程。我们知道Native层SensorService启动后,会进入我们的treadLoop方法:bool SensorService::threadLoop()...

接私活,免费帮家长照顾20-25岁的好看的女孩子。 6715

Andriod Sensor HAL实现

Andriod Sensor HAL实现 1 Android sensor构建 Android4.1 系统内置对传感器的支持达13种,他们分别是:加速度传感器(accelerometer)、磁力传感器(magnetic field)、方向传感器(orientation)、陀螺仪(gyroscope)、环境光照传感器(light)、压力传感器(pressure)、温度传感器(temper

fe学习之旅 2781

Sensor系列二 HAL层分析

一、HAL层入口          hal层主要是调用驱动接口,获取sensor驱动中传输上来的数据,提供给上层接口,屏蔽底层的细节, 具有承上启下的作用,将android系统分成了用户空间和内核空间两部分,其中硬件抽象层(HAL)运行在用户 空间,而sensor的hal程序运行在内核空间。        ./vendor/mediatek/proprietary/hardware/s

frank_zyp的博客 6132

Sensor -- HAL 分析

1、Android sensor架构 Android4.0系统内置对传感器的支持达13种,它们分别是:加速度传感器gsensor(accelerometer)、磁力传感器(magnetic field)、方向传感器(orientation)、陀螺仪(gyroscope)、环境光照传感器(ligh...

679

高通SDM845平台Sensor学习——2.Hal层

二:Sensor Hal层代码分析 Hal code放在/vendor/qcom/proprietary/sensors-see/中 sensors-hal文件夹中包含framework和sensors文件夹,为本文重点分析对象。 首先分析sensors文件夹: 根据C++继承的特性,相同的操作各个class共同拥有,不同的操作每个class可以重写,该文件夹内文件为每个sensor不...

汉克233的博客 1万+

sensor驱动层 --- light sensor

概述:Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。为什么要这样安排呢?把硬件抽象层和内核驱动整合在一起放在内核空间不可行吗?从技术实现的角度...

Jack的博客 6843

英飞凌TC377的Flash管理、UCB配置与HSM安全机制解析

本文深入解析了英飞凌TC377微控制器的Flash存储结构、UCB配置机制与HSM安全模块。详细阐述了带Cache与不带Cache的PFlash地址访问差异、利用SOTA与AB Swap实现无感OTA更新的原理,以及如何通过UCB安全配置启动流程与写保护。重点剖析了HSM硬件安全模块在密钥管理、安全启动与安全OTA中的核心作用,为开发高可靠性嵌入式系统提供实战指南。

weixin_29170327的博客 523

Android Sensor详解(8)sensor hal层分析第一篇

前言 高通的hal层其实分2种,一种是直接从kernel这边报数据上来,由sensorhal层来监听,另外一种是走ADSP的模式,HAL层通过qmi的形式进行监听的。 hal层简介 Google为Sensor提供了统一的HAL接口,不同的硬件厂商需要根据该接口来实现并完成具体的硬件抽象层,Android中Sensor的HAL接口定义在:hardware/libhardware/include/h...

haigand的专栏 2243

MATLAB安装

Matlab 2016a 安装包及破解教程百度云分享链接: 链接:https://pan.baidu.com/s/1i6BgD8p       密码:17gg   Matlab安装教程: 1、下载文件,得到R2016a_win64.part1.rar、R2016a_win64.part2.rar两部分安装文件和Matlab 2016a Win64 Crack破解文件。 2、解压安装文件(解...

qq_36734094的博客 17万+

HillCrest Sensor HAL

目录 1. 抽象定义 1.1 sensor type 1.2 sensor_t 1.3 sensor_module_t 1.4 sensors_poll_device_t 2. 抽象方法 2.1 get_...

angan4532的博客 503

做形态学方法的团队_“设计形态学”与“第三自然”

文/邱松(清华大学 美术学院)摘要:“设计形态学”是基于“形态学”研究的设计基础学科。“形态”既是该学科研究的主体,又是与其它学科相连接的“纽带”。实际上,不管是供养我们的地球家园,还是神秘莫测的浩瀚宇宙,均由数量纷繁、千姿百态的“形态”构筑而成。形态通常被分成两大类:一类是源于“第一自然”的“自然形态”;另一类是来自“第二自然”的“人造形态”。而这两类形态正是“设计形态学”研究的两条...

weixin_31548723的博客 2683

DC/DC开关电源学习笔记(十五)四开关Buck-Boost-FSBB升降压电路拓扑与工作原理

在DCDC领域,最为常见的是buck拓扑,其次是boost拓扑,而buck-boost的关注度相对较低。但是在电池供电场景日益普及的现在,升降压的需求在不断上升,现在更加关注buck-boost这个拓扑。而在所有buck-boost拓扑中,四开关buck-boost最受欢迎。四开关buck-boost的拓扑很简单,如下图。

小幽余生不加糖 6012

sensor hal

sensor hal

weixin_42546931的博客 1184

华为OD机考双机位C卷 - 信道分配(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 信道分配

算法大师! 453

sensor 传感器在 HAL 层的表现

1、使用HAL 的方法 以Sensor 传感器为例,介绍使用 HAL 的 方法,具体流程如下所示。 (1)Native code 通过hw_get_module 调用获取 HAL stub. hw_get_module (LED_HARDWARE_MODULE_ID,(const hw_module_t** )&module) (2) 通过继承 hw_module_methods_t 的 callback 拉打开设备。 module->methods->open(module,

Venus 的博客 2948

YOLOv8改进 | 注意力篇 | YOLOv8引入EMAttention(EMA)注意力

具体来说,除了对全局信息进行编码以重新校准每个并行分支中的通道权重之外,还通过跨维度交互来进一步聚合两个并行分支的输出特征,以捕获像素级的成对关系。3. 跨空间学习:除了在每个并行子网络中建立局部的跨通道交互外,EMA模块还通过跨空间学习方法融合了两个并行子网络的输出特征图。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv8改进有效涨点专栏,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 896

华为OD新系统机试真题 - 配置操作失败数量统计

华为OD机试新系统 4月8号【配置操作失败数量统计】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【配置操作失败数量统计】。

qq_45776114的博客 1161

MTK 平台sensor arch 介绍-hal

一:整体框架 如上图所示:MTK 的senor 架构从大框架上分为 AP侧 与SCP 侧AP 侧 由mtk-Hal 层和 kernel 组成,其主要思想在于实现了一个HfManager 完成了对多个sensor 的control 处理由一个.cpp 处理。这个也是arch 2 区别于arch 1 的一大改变, (注:arch 1 为每一个sensor 的实现由单独的cpp 在kernrl 有单独的.c) SCP 侧可以理解为 qcom 平台的slpi侧:SCP(Tinysys)协处理器负责传感器

鑫鑫缺点金的博客 5820

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Qcom_Sensor(三)--- 之 Android Sensor HAL层初始化流程

Qcom_Sensor(三)--- 之 Android Sensor HAL层初始化流程一、Sensor HAL打开/初始化过程二、sensor1 API详解2.1 、SensorsContext() --> sensor1_init() 调用流程三、获取sensor列表getSensorList四、addSensor具体过程五、添加其他的sensor六、updateSensorList更新...

|~~~热爱生活、努力学习的小伙汁~~~| 4090

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

4 Android Sensor分析

1 Android Sensor系统框架 Android Sensor系统框架如下: 图1 Android Sensor系统框架图 (1)SystemServer创建SensorService服务。 (2)之后将SensorService服务添加到ServiceManager里。 注意:ServiceManager管理的是SensorService服务不是SensorManager! (3)Android app通过SensorManager获取SensorService服务,SensorMana.

u012906122的专栏 5971

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: linux i2c驱动
下一篇: sensor__HAl分析(实现)
new_abc
new_abc 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 701粉丝 396原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值