1 /* 2 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3 * 4 * HDF is dual licensed: you can use it either under the terms of 5 * the GPL, or the BSD license, at your option. 6 * See the LICENSE file in the root of this repository for complete details. 7 */ 8 9 #ifndef SENSOR_CONFIG_PARSER_H 10 #define SENSOR_CONFIG_PARSER_H 11 12 #include "device_resource_if.h" 13 #include "hdf_device_desc.h" 14 #include "i2c_if.h" 15 #include "sensor_device_type.h" 16 #include "sensor_platform_if.h" 17 #include "spi_if.h" 18 19 #define SENSOR_CONFIG_MAX_ITEM 100 20 #define MAX_SENSOR_INDEX_NUM 48 21 #define MAX_SENSOR_AXIS_NUM 3 22 23 enum SensorRegOpsType { 24 SENSOR_INIT_GROUP = 0, 25 SENSOR_ENABLE_GROUP, 26 SENSOR_DISABLE_GROUP, 27 SENSOR_GROUP_MAX, 28 }; 29 30 struct SensorAttr { 31 const char *chipName; 32 uint16_t chipIdReg; 33 uint16_t chipIdValue; 34 }; 35 36 enum SensorRegCfgIndex { 37 SENSOR_REG_CFG_ADDR_INDEX = 0, 38 SENSOR_REG_CFG_VALUE_INDEX, 39 SENSOR_REG_CFG_MASK_INDEX, 40 SENSOR_REG_CFG_LEN_INDEX, 41 SENSOR_REG_CFG_DELAY_INDEX, 42 SENSOR_REG_CFG_OPS_INDEX, 43 SENSOR_REG_CFG_CAL_INDEX, 44 SENSOR_REG_CFG_SHIFT_INDEX, 45 SENSOR_REG_CFG_DEBUG_INDEX, 46 SENSOR_REG_CFG_SAVE_INDEX, 47 SENSOR_REG_CFG_INDEX_MAX, 48 }; 49 50 struct SensorRegCfg { 51 uint16_t regAddr; 52 union { 53 uint16_t value; 54 uint8_t *buff; 55 }; 56 uint16_t mask; 57 uint16_t len; 58 uint32_t delay : 12; 59 uint32_t opsType : 5; 60 uint32_t calType : 3; 61 uint32_t shiftNum : 4; 62 uint32_t debug : 1; 63 uint32_t save : 2; 64 }; 65 66 struct SensorRegCfgGroupNode { 67 uint32_t itemNum; 68 struct SensorRegCfg *regCfgItem; 69 }; 70 71 struct SensorDirection { 72 uint32_t sign[MAX_SENSOR_AXIS_NUM]; 73 uint32_t map[MAX_SENSOR_AXIS_NUM]; 74 }; 75 76 enum SensorDirectionIndex { 77 SIGN_X_INDEX = 0, 78 SIGN_Y_INDEX, 79 SIGN_Z_INDEX, 80 AXIS_X_INDEX, 81 AXIS_Y_INDEX, 82 AXIS_Z_INDEX, 83 AXIS_INDEX_MAX, 84 }; 85 86 enum AxisNum { 87 AXIS_X = 0, 88 AXIS_Y = 1, 89 AXIS_Z = 2, 90 }; 91 92 struct SensorCfgData { 93 struct SensorBusCfg busCfg; 94 struct SensorBasicInfo sensorInfo; 95 struct SensorAttr sensorAttr; 96 struct SensorRegCfgGroupNode **regCfgGroup; 97 struct SensorRegCfgGroupNode **extendedRegCfgGroup; 98 const struct DeviceResourceNode *root; 99 struct SensorDirection *direction; 100 }; 101 102 int32_t GetSensorBaseConfigData(const struct DeviceResourceNode *node, struct SensorCfgData *config); 103 int32_t ParseSensorRegConfig(struct SensorCfgData *config); 104 void ReleaseSensorAllRegConfig(struct SensorCfgData *config); 105 int32_t GetSensorBusHandle(struct SensorBusCfg *busCfg); 106 int32_t ReleaseSensorBusHandle(struct SensorBusCfg *busCfg); 107 int32_t DetectSensorDevice(struct SensorCfgData *config); 108 int32_t SensorRawDataToRemapData(struct SensorDirection *direction, int32_t *remapData, uint32_t num); 109 void ReleaseSensorDirectionConfig(struct SensorCfgData *config); 110 int32_t ParseSensorDirection(struct SensorCfgData *config); 111 int32_t ParseSensorRegGroup(struct DeviceResourceIface *parser, const struct DeviceResourceNode *regCfgNode, 112 const char *groupName, struct SensorRegCfgGroupNode **groupNode); 113 114 #endif /* SENSOR_CONFIG_PARSER_H */ 115