From 1c832de3d60a30208b324edb06c147f1b6c75e41 Mon Sep 17 00:00:00 2001 From: YOUR_NAME Date: Fri, 19 Nov 2021 12:29:43 +0800 Subject: [PATCH 1/2] modify_common Signed-off-by: YOUR_NAME --- .../sensor/driver/accel/sensor_accel_driver.c | 4 +- .../driver/chipset/accel/accel_bmi160.c | 2 +- .../common/include/sensor_config_controller.h | 6 +- .../common/src/sensor_config_controller.c | 90 ++++++++++++++----- 4 files changed, 75 insertions(+), 27 deletions(-) diff --git a/model/sensor/driver/accel/sensor_accel_driver.c b/model/sensor/driver/accel/sensor_accel_driver.c index dca54870a..7078fb075 100644 --- a/model/sensor/driver/accel/sensor_accel_driver.c +++ b/model/sensor/driver/accel/sensor_accel_driver.c @@ -108,7 +108,7 @@ static int32_t SetAccelEnable(void) return HDF_SUCCESS; } - ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_ENABLE_GROUP]); + ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_ENABLE_GROUP], NULL, 0); if (ret != HDF_SUCCESS) { HDF_LOGE("%s: Accel sensor enable config failed", __func__); return ret; @@ -143,7 +143,7 @@ static int32_t SetAccelDisable(void) return HDF_SUCCESS; } - ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_DISABLE_GROUP]); + ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_DISABLE_GROUP], NULL, 0); if (ret != HDF_SUCCESS) { HDF_LOGE("%s: Accel sensor disable config failed", __func__); return ret; diff --git a/model/sensor/driver/chipset/accel/accel_bmi160.c b/model/sensor/driver/chipset/accel/accel_bmi160.c index 2ee5764f8..19e6186ad 100644 --- a/model/sensor/driver/chipset/accel/accel_bmi160.c +++ b/model/sensor/driver/chipset/accel/accel_bmi160.c @@ -120,7 +120,7 @@ static int32_t InitBmi160(struct SensorCfgData *data) int32_t ret; CHECK_NULL_PTR_RETURN_VALUE(data, HDF_ERR_INVALID_PARAM); - ret = SetSensorRegCfgArray(&data->busCfg, data->regCfgGroup[SENSOR_INIT_GROUP]); + ret = SetSensorRegCfgArray(&data->busCfg, data->regCfgGroup[SENSOR_INIT_GROUP], NULL, 0); if (ret != HDF_SUCCESS) { HDF_LOGE("%s: BMI160 sensor init config failed", __func__); return HDF_FAILURE; diff --git a/model/sensor/driver/common/include/sensor_config_controller.h b/model/sensor/driver/common/include/sensor_config_controller.h index 9521f7dc5..d8323877e 100644 --- a/model/sensor/driver/common/include/sensor_config_controller.h +++ b/model/sensor/driver/common/include/sensor_config_controller.h @@ -26,13 +26,15 @@ enum SensorOpsType { SENSOR_OPS_TYPE_WRITE = 2, SENSOR_OPS_TYPE_READ_CHECK = 3, SENSOR_OPS_TYPE_UPDATE_BITWISE = 4, + SENSOR_OPS_TYPE_EXTBUFF_READ = 5, + SENSOR_OPS_TYPE_EXTBUFF_WRITE = 6, }; struct SensorOpsCall { enum SensorOpsType type; - int32_t (*ops)(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem); + int32_t (*ops)(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem, uint8_t *buf, uint8_t len); }; -int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorRegCfgGroupNode *group); +int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorRegCfgGroupNode *group, uint8_t *buf, uint8_t len); #endif /* SENSOR_CONFIG_CONTROLLER_H */ diff --git a/model/sensor/driver/common/src/sensor_config_controller.c b/model/sensor/driver/common/src/sensor_config_controller.c index e2f3689dd..ef9757ddf 100644 --- a/model/sensor/driver/common/src/sensor_config_controller.c +++ b/model/sensor/driver/common/src/sensor_config_controller.c @@ -14,14 +14,14 @@ #define HDF_LOG_TAG sensor_config_controller_c -static int32_t SensorOpsNop(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem) +static int32_t SensorOpsNop(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem, uint8_t *buf, uint8_t len) { (void)busCfg; (void)cfgItem; return HDF_SUCCESS; } -static int32_t SensorOpsRead(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem) +static int32_t SensorOpsRead(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem, uint8_t *buf, uint8_t len) { uint16_t value = 0; int32_t ret; @@ -50,32 +50,21 @@ static uint32_t GetSensorRegRealValueMask(struct SensorRegCfg *cfgItem, uint32_t return mask; } -static int32_t SensorOpsWrite(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem) +static int32_t SensorOpsWrite(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem, uint8_t *buf, uint8_t len) { - uint8_t calType = cfgItem->calType; uint8_t value[SENSOR_VALUE_BUTT]; int32_t ret = HDF_FAILURE; value[SENSOR_ADDR_INDEX] = cfgItem->regAddr; value[SENSOR_VALUE_INDEX] = cfgItem->value; - switch (calType) { - case SENSOR_CFG_CALC_TYPE_NONE: - ret = WriteSensor(busCfg, value, sizeof(value)); - break; - case SENSOR_CFG_CALC_TYPE_SET: - case SENSOR_CFG_CALC_TYPE_REVERT: - case SENSOR_CFG_CALC_TYPE_XOR: - case SENSOR_CFG_CALC_TYPE_LEFT_SHIFT: - case SENSOR_CFG_CALC_TYPE_RIGHT_SHIFT: - default: - break; - } - + ret = WriteSensor(busCfg, value, sizeof(value)); + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "write i2c reg"); + return ret; } -static int32_t SensorOpsReadCheck(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem) +static int32_t SensorOpsReadCheck(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem, uint8_t *buf, uint8_t len) { uint32_t value = 0; uint32_t originValue; @@ -107,6 +96,8 @@ static int32_t SensorBitwiseCalculate(struct SensorRegCfg *cfgItem, uint32_t *va mask = GetSensorRegRealValueMask(cfgItem, &originValue, valueMask); switch ((enum SensorCalculateType)cfgItem->calType) { + case SENSOR_CFG_CALC_TYPE_NONE: + break; case SENSOR_CFG_CALC_TYPE_SET: *value &= ~mask; *value |= (originValue & mask); @@ -116,14 +107,28 @@ static int32_t SensorBitwiseCalculate(struct SensorRegCfg *cfgItem, uint32_t *va *value = ~(*value & mask); *value = tmp | (*value & mask); break; + case SENSOR_CFG_CALC_TYPE_XOR: + tmp = *value & (~mask); + originValue = originValue & mask; + *value = *value & mask; + *value ^= originValue; + *value = tmp | (*value); + break; + case SENSOR_CFG_CALC_TYPE_LEFT_SHIFT: + *value = *value << cfgItem->shiftNum; + break; + case SENSOR_CFG_CALC_TYPE_RIGHT_SHIFT: + *value = *value >> cfgItem->shiftNum; + break; default: HDF_LOGE("%s: unsupported cal type", __func__); break; } + return 0; } -static int32_t SensorOpsUpdateBitwise(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem) +static int32_t SensorOpsUpdateBitwise(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem, uint8_t *buf, uint8_t len) { uint32_t value = 0; uint32_t busMask = 0x000000ff; @@ -150,15 +155,46 @@ static int32_t SensorOpsUpdateBitwise(struct SensorBusCfg *busCfg, struct Sensor return HDF_SUCCESS; } +static int32_t SensorOpsExtBuffRead(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem, uint8_t *buf, uint8_t len) +{ + int32_t ret = HDF_FAILURE; + + CHECK_NULL_PTR_RETURN_VALUE(busCfg, HDF_FAILURE); + + if (busCfg->busType == SENSOR_BUS_I2C) { + ret = ReadSensor(busCfg, cfgItem->regAddr, buf, len); + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "read i2c reg"); + } + + return ret; +} + +static int32_t SensorOpsExtBuffWrite(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem, uint8_t *buf, uint8_t len) +{ + int32_t ret = HDF_FAILURE; + uint8_t value[SENSOR_VALUE_BUTT]; + + CHECK_NULL_PTR_RETURN_VALUE(busCfg, HDF_FAILURE); + + if (busCfg->busType == SENSOR_BUS_I2C) { + ret = WriteSensor(busCfg, buf, len); + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "write i2c reg"); + } + + return ret; +} + static struct SensorOpsCall g_doOpsCall[] = { { SENSOR_OPS_TYPE_NOP, SensorOpsNop }, { SENSOR_OPS_TYPE_READ, SensorOpsRead }, { SENSOR_OPS_TYPE_WRITE, SensorOpsWrite }, { SENSOR_OPS_TYPE_READ_CHECK, SensorOpsReadCheck }, { SENSOR_OPS_TYPE_UPDATE_BITWISE, SensorOpsUpdateBitwise }, + { SENSOR_OPS_TYPE_EXTBUFF_READ, SensorOpsExtBuffRead }, + { SENSOR_OPS_TYPE_EXTBUFF_WRITE, SensorOpsExtBuffWrite }, }; -int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorRegCfgGroupNode *group) +int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorRegCfgGroupNode *group, uint8_t *buf, uint8_t len) { int32_t num = 0; uint32_t count; @@ -176,12 +212,22 @@ int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorReg HDF_LOGE("%s: cfg item para invalid", __func__); break; } - if (g_doOpsCall[cfgItem->opsType].ops != NULL) { - if (g_doOpsCall[cfgItem->opsType].ops(busCfg, cfgItem) != HDF_SUCCESS) { + if (g_doOpsCall[cfgItem->opsType].ops != NULL && buf == NULL && cfgItem->opsType < 5) { + + if (g_doOpsCall[cfgItem->opsType].ops(busCfg, cfgItem, NULL, 0) != HDF_SUCCESS) { HDF_LOGE("%s: malloc sensor reg config item data failed", __func__); return HDF_FAILURE; } } + + if (g_doOpsCall[cfgItem->opsType].ops != NULL && buf != NULL && cfgItem->opsType > 4) { + + if (g_doOpsCall[cfgItem->opsType].ops(busCfg, cfgItem, buf, len) != HDF_SUCCESS) { + HDF_LOGE("%s: malloc sensor extreg config item data failed", __func__); + return HDF_FAILURE; + } + } + if (cfgItem->delay != 0) { OsalMDelay(cfgItem->delay); } -- Gitee From 158d40f306c6469e8b80e759b817282a8cfc1224 Mon Sep 17 00:00:00 2001 From: YOUR_NAME Date: Fri, 19 Nov 2021 13:59:17 +0800 Subject: [PATCH 2/2] modify_common_01 Signed-off-by: YOUR_NAME --- .../driver/common/include/sensor_config_controller.h | 2 ++ .../sensor/driver/common/src/sensor_config_controller.c | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/model/sensor/driver/common/include/sensor_config_controller.h b/model/sensor/driver/common/include/sensor_config_controller.h index d8323877e..b4d020053 100644 --- a/model/sensor/driver/common/include/sensor_config_controller.h +++ b/model/sensor/driver/common/include/sensor_config_controller.h @@ -11,6 +11,8 @@ #include "sensor_config_parser.h" +#define EXTER_JUDGE 5 + enum SensorCalculateType { SENSOR_CFG_CALC_TYPE_NONE = 0, SENSOR_CFG_CALC_TYPE_SET = 1, // To Support:1.Bitwise AND "&" 2.Bitwise OR "|" diff --git a/model/sensor/driver/common/src/sensor_config_controller.c b/model/sensor/driver/common/src/sensor_config_controller.c index ef9757ddf..bad573497 100644 --- a/model/sensor/driver/common/src/sensor_config_controller.c +++ b/model/sensor/driver/common/src/sensor_config_controller.c @@ -176,8 +176,11 @@ static int32_t SensorOpsExtBuffWrite(struct SensorBusCfg *busCfg, struct SensorR CHECK_NULL_PTR_RETURN_VALUE(busCfg, HDF_FAILURE); + value[SENSOR_ADDR_INDEX] = cfgItem->regAddr; + value[SENSOR_VALUE_INDEX] = *(buf); + if (busCfg->busType == SENSOR_BUS_I2C) { - ret = WriteSensor(busCfg, buf, len); + ret = WriteSensor(busCfg, value, len); CHECK_PARSER_RESULT_RETURN_VALUE(ret, "write i2c reg"); } @@ -212,7 +215,7 @@ int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorReg HDF_LOGE("%s: cfg item para invalid", __func__); break; } - if (g_doOpsCall[cfgItem->opsType].ops != NULL && buf == NULL && cfgItem->opsType < 5) { + if (g_doOpsCall[cfgItem->opsType].ops != NULL && buf == NULL && cfgItem->opsType < EXTER_JUDGE) { if (g_doOpsCall[cfgItem->opsType].ops(busCfg, cfgItem, NULL, 0) != HDF_SUCCESS) { HDF_LOGE("%s: malloc sensor reg config item data failed", __func__); @@ -220,7 +223,7 @@ int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorReg } } - if (g_doOpsCall[cfgItem->opsType].ops != NULL && buf != NULL && cfgItem->opsType > 4) { + if (g_doOpsCall[cfgItem->opsType].ops != NULL && buf != NULL && cfgItem->opsType >= EXTER_JUDGE) { if (g_doOpsCall[cfgItem->opsType].ops(busCfg, cfgItem, buf, len) != HDF_SUCCESS) { HDF_LOGE("%s: malloc sensor extreg config item data failed", __func__); -- Gitee