// 主要介绍 sensor 的配置项
json 里面的 data 类型 都是 10进制的…
以 a+g sensor 介绍
所有平台特定的配置文件在 JSON 文件顶层均包含“config”组
json 开头的 就是 config 组
这里 可以看到硬件平台 和 soc_id
这两个东西 是怎么确定的呢…
可以用 adb 读取 , 操作如下:
hw_platform:cat /sys/devices/soc0/hw_platform
soc_id:cat /sys/devices/soc0/soc_id
在 config 组后,驱动程序的所有平台配置均包含在名为 <sensor_name>_<hardware_id>_platform 的顶层
组中
可以看到 是有这个个 组的.
但是 除了这个之外,我们还看到了有个类似这样的,这个是自己客制化的??稍后解答( 是的,这个就是 驱动的 特定的配置,在后面会讲 )
必须将标为必填的注册表项填入传感器配置文件。如果标为可选的项目不适用于传感器,可以不填入传感器配置文件. 关于哪些是必填的哪些不是。要参考高通的文档,才能知道.
配置文件可包含 data_type 特定的注册表子组(例如加速度)。该子组包含出厂校准参数等数据类型特定的平台配置
// 上面看到的是平台的配置,除了这个,我们还有些特定的配置
驱动程序特定的配置:
注册表组/项目包含驱动程序特定的配置
所有驱动程序特定的配置文件在 JSON 文件顶层均包含“config”组
所有配置均包含在顶层 <sensor_name>_<hardware_id> 注册表组中
配置文件包含 data_type 特定注册表组(例如加速度),该组包含数据类型特定的配置。
自定义注册表
所有传感器均可将自定义注册表组/项目添加至驱动程序特定的配置文件中,以满足传感器/算法运算针对持久性数据的所有自定义要求
这个就是 自定义的 注册表…
名字就是 sensor_name_hardware_id
json 的配置 主要分为三部分
1:顶层 config
2: 平台 注册表的配置
3:特定的注册表配置( 可以理解为 客制化)
// 平台 注册表的配置 begin ----------------------------------
我们先看 config 注册表子组
这个具体的配置项 见高通手册
大概的解释下:
“bus_type”:{ “type”: “int”, “ver”: “0”,
“data”: “3”
首先看到 type:int . 说明填入的数据是 int 类型.
ver:0 , 版本号,表示的这个版本是0
如果我们通过 adb push json 文件,如果不删除解析出来的 json 文件,将不会生效,生效的依据就是根据版本号,只有版本号大于之前的才会生效。
如果 persist 分区为空或者 文件的修改时间变了,然后在依据 ver 这个版本号决定那个要重新解析.
data: 是我们要填入的.
如果我们的项目使用的是 i3c ,则 data: 3
bus_instance: 干啥的?
指的是 bus 使用的 哪个 QUP.
"bus_instance":{ "type": "int", "ver": "0",
"data": "1"
slave_config :
对于 I2C 和 I3C 而言,该项目是从芯片地址。对于 SPI,该项目是从设备的
片选线路
7位地址…
"slave_config":{ "type": "int", "ver": "0",
"data": "107"
},
这三个 可以参考博客:
https://blog.csdn.net/mjfh095215/article/details/113932106
该项目标识 COM 总线时钟速度,单位为 kHz。
"min_bus_speed_khz":{ "type": "int", "ver": "0",
"data": "400"
},
"max_bus_speed_khz":{ "type": "int", "ver": "0",
"data": "12500"
},
reg_addr_type :该项目标识传感器支持的注册表地址类型。参见 sns_com_port_types.h。
寄存器的地址类型,(寄存器的地址长度,lsm6dso 长度基本都是 8位.,所以这个设置为 8 bit )
有这么几种。。
typedef enum
{
SNS_REG_ADDR_8_BIT,
SNS_REG_ADDR_16_BIT,
SNS_REG_ADDR_32_BIT,
} sns_reg_addr_type;
一般都是 8位寄存器吧…
但是具体用那种怎么看??暂时不知道这个怎么填写…???
/*
2022年11月19日16:23:56 补充:
这个是要看 芯片手册的,取决于 器件的寄存器的长度,一般都是8位.
*/
"reg_addr_type":{ "type": "int", "ver": "0",
"data": "0"
},
dri_irq_num:
data: 指的就是中断号
接下来是 中断引脚的配置。
如果是轮询模式, 就不需要设置了.
"dri_irq_num":{ "type": "int", "ver": "0",
"data": "123"
},
"irq_pull_type":{ "type": "int", "ver": "0",
"data": "0"
},
"irq_is_chip_pin":{ "type": "int", "ver": "0",
"data": "1"
},
"irq_drive_strength":{ "type": "int", "ver": "0",
"data": "0"
},
"irq_trigger_type":{ "type": "int", "ver": "0",
"data": "3"
},
// ------------------------------
"num_rail":{ "type": "int", "ver": "0",
"data": "1"
},
"rail_on_state":{ "type": "int", "ver": "0",
"data": "2"
},
"vddio_rail":{ "type": "str", "ver": "0",
"data": "/pmic/client/sensor_vddio"
},
"rigid_body_type":{ "type": "int", "ver": "0",
"data": "0"
},
这两个数据手册上没有看到,猜测应该是自己添加的, 应该是 最大和最小的数据速率.
// ---------------- config 注册表子组 完成
当然 平台 端还是有些注册表的子组的:
.placement
此项为注册表组。包括 12 个可解析为 (float[12]} 的浮点型注册表项:传感器元件在芯片框架中的位置和方
向。参见 sensors/1.0/types.h 中的 Android 定义 AINFO_SENSOR_PLACEMENT。
这些项目为:
“0”
.
.
“11”
这些数据怎么填的,不清楚。
// 是在 设置 方向 .
".orient":{
"owner": "lsm6dso",
"x":{ "type": "str", "ver": "0",
"data": "+x"
},
"y":{ "type": "str", "ver": "0",
"data": "+y"
},
"z":{ "type": "str", "ver": "0",
"data": "+z"
}
},
orient:解释
驱动程序将传感器轴向调整为芯片轴向(Android 坐标格式)
每个注册表项代表每条轴的方向信息,注册表项名称与芯片轴名称相同。
每个项目的数据类型为字符串,均为轴值与符号的组合。
值:
方向:
“.fac_cal” :
该项目是放置在数据类型特定注册表组中的注册表组。
示例:“.gyro”组包含的“.fac_cal”组中具有陀螺仪出厂校准参数。
该组中的项目为浮点型。有关每个 data_type 包含的这些项目的格式
// ok 平台端 已经完毕---------- end
// 驱动中的 特定的程序 ------ begin ------------
首先 我们先看下 config 这个注册表子组
"is_dri":{ "type": "int", "ver": "0",
"data": "1"
},
"hw_id":{ "type": "int", "ver": "0",
"data": "0"
"res_idx":{ "type": "int", "ver": "0",
"data": "3"
},
"sync_stream":{ "type": "int", "ver": "0",
"data": "0"
// 暂时写这么多,后续有时间继续补充,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)