高通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的寄存器,不知道什么用。