qcom smgr的attr概述

xiaoxiao2021-02-28  64

高通8926平台通过get和set attr来控制sensor,所有的attr由下面的enum列举。

typedef enum

{     SNS_DDF_ATTRIB_POWER_INFO,     SNS_DDF_ATTRIB_POWER_STATE,     SNS_DDF_ATTRIB_DELAYS,     SNS_DDF_ATTRIB_RANGE,     SNS_DDF_ATTRIB_RESOLUTION_ADC,     SNS_DDF_ATTRIB_RESOLUTION,     SNS_DDF_ATTRIB_LOWPASS,     SNS_DDF_ATTRIB_MOTION_DETECT,     SNS_DDF_ATTRIB_DRIVER_INFO,     SNS_DDF_ATTRIB_DEVICE_INFO,     SNS_DDF_ATTRIB_THRESHOLD,     SNS_DDF_ATTRIB_ACCURACY,     SNS_DDF_ATTRIB_BIAS,     SNS_DDF_ATTRIB_ODR,     SNS_DDF_ATTRIB_SUPPORTED_ODR_LIST,     SNS_DDF_ATTRIB_REGISTRY_GROUP,     SNS_DDF_ATTRIB_IO_REGISTER,     SNS_DDF_ATTRIB_FIFO,     SNS_DDF_ATTRIB_ODR_TOLERANCE

} sns_ddf_attribute_e;

下面由本人结合代码简要说明,如有错误,请指正。

1. SNS_DDF_ATTRIB_POWER_STATE:    每个驱动必备的,都是set,没有get; 2. SNS_DDF_ATTRIB_MOTION_DETECT:    都是set,没有get;通过sns_smgr_set_hw_md_int()调用,这里只设置accel sensor,但gyro中也有对此attr的处理。    设置中断相关寄存器。 3. SNS_DDF_ATTRIB_THRESHOLD:   主要用于get光传感器和接近传感器的THRESHOLD 4. SNS_DDF_ATTRIB_ACCURACY:   主要用于get光传感器和接近传感器的精确度。代码里2771的prox的accuracy是40,手册里没找到,不知怎么得到的 5. SNS_DDF_ATTRIB_SUPPORTED_ODR_LIST:   sns_smgr_dd_init会调用sns_smgr_init_odr_tables来get device driver的odr list。 6. SNS_DDF_ATTRIB_REGISTRY_GROUP:   多用于ALS/PROX初始化时,通过sns_ddf_smgr_notify_event(SNS_DDF_EVENT_UPDATE_REGISTRY_GROUP),更新nv 7. SNS_DDF_ATTRIB_ODR_TOLERANCE:   只有accel lis3dsh的get attr中包含此attr,但实际没有地方进行get。 下面的属性以sns_dd_akm8975_get_attr为例: 1. SNS_DDF_ATTRIB_POWER_INFO:   需要将sns_ddf_power_info_s结构体赋值,它包含active_current和lowpower_current俩个成员,查看datasheet的   Electrical Characteristics-->>DC Characteristics-->>Current consumption 2. SNS_DDF_ATTRIB_RANGE:   需要将sns_ddf_range_s结构体赋值,它包含min和max俩个成员,查看datasheet的   Electrical Characteristics-->>Analog Circuit Characteristics-->>Magnetic sensor measurement range 3. SNS_DDF_ATTRIB_RESOLUTION_ADC:   需要将sns_ddf_resolution_adc_s结构体赋值,它包含bit_len和max_freq俩个成员,   bit_len:查看datasheet的Electrical Characteristics-->>Analog Circuit Characteristics-->>Measurement data output bit   max_freq:根据代码中注释,他是驱动在bit_len下合适的最大频率。AKM8975是50,不知怎么算的??? 4. SNS_DDF_ATTRIB_RESOLUTION:   需要将sns_ddf_resolution_t类型变量赋值,它实际类型为q16_t,   查看datasheet的Overview-->>Output data resolution:13 bit (0.3 μT / LSB),经公式FX_FLTTOFIX_Q16(0.3 * TESLA_TO_GAUSS / 1000000)转换 5. SNS_DDF_ATTRIB_DELAYS:   需要将sns_ddf_delays_s结构体赋值,它包含time_to_active和time_to_data俩个成员,   查看datasheet的Electrical Characteristics-->>Analog Circuit Characteristics-->>Time for measurement 6. SNS_DDF_ATTRIB_DRIVER_INFO:   给sns_ddf_driver_info_s赋值 7. SNS_DDF_ATTRIB_DEVICE_INFO:   给sns_ddf_device_info_s赋值 下面的属性以sns_dd_acc_bma2x2_get_attr为例: 1. SNS_DDF_ATTRIB_LOWPASS:   需要将sns_ddf_lowpass_freq_t类型变量赋值,它实际类型为q16_t,   查看datasheet的Table 8: Bandwidth configuration 2. SNS_DDF_ATTRIB_IO_REGISTER:   虽然是get,但传入的value是有值的,driver根据这个值来读取指定寄存器,在把值赋值给value传给SMGR   需要将sns_ddf_io_register_s结构体赋值。 3. SNS_DDF_ATTRIB_BIAS:   轴偏差,没有偏差就是0 4. SNS_DDF_ATTRIB_ODR:   就是将之前set的odr反馈给smgr,可配置的值查看datasheet的Table 8: Bandwidth configuration 5. SNS_DDF_ATTRIB_FIFO:   将sns_ddf_fifo_attrib_get_s结构体赋值,值不知道是怎么来的。set的时候是写了两个reserved的寄存器,不知道什么用。  
转载请注明原文地址: https://www.6miu.com/read-41574.html

最新回复(0)