From 93aa282b13e2debceda7121eee97a05e470b3860 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 13 May 2021 20:10:16 +0800 Subject: [PATCH] =?UTF-8?q?IssueNo=EF=BC=9A#I3R803=20Description:modify=20?= =?UTF-8?q?sensor=20module=20debug=20information=20Feature=20or=20Bugfix:B?= =?UTF-8?q?ugfix=20Binary=20Source:=20NO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sensor/driver/accel/sensor_accel_driver.c | 5 +-- .../sensor/driver/accel/sensor_accel_driver.h | 2 +- .../driver/chipset/accel/accel_bmi160.c | 39 ++++++++----------- .../common/include/sensor_device_manager.h | 2 +- .../driver/common/include/sensor_parser.h | 2 + .../sensor/driver/common/src/sensor_common.c | 16 ++++---- .../driver/common/src/sensor_device_common.c | 12 +++++- .../driver/common/src/sensor_device_manager.c | 26 ++++++++++--- 8 files changed, 60 insertions(+), 44 deletions(-) diff --git a/model/sensor/driver/accel/sensor_accel_driver.c b/model/sensor/driver/accel/sensor_accel_driver.c index 05bd9d4e4..b2d73c95a 100644 --- a/model/sensor/driver/accel/sensor_accel_driver.c +++ b/model/sensor/driver/accel/sensor_accel_driver.c @@ -38,7 +38,7 @@ static struct AccelDrvData *AccelGetDrvData(void) static struct SensorRegCfgGroupNode *g_regCfgGroup[SENSOR_GROUP_MAX] = { NULL }; -int32_t RegisterAccelChipOps(struct AccelOpsCall *ops) +int32_t RegisterAccelChipOps(const struct AccelOpsCall *ops) { struct AccelDrvData *drvData = NULL; @@ -131,7 +131,7 @@ static int32_t SetAccelEnable(void) CHECK_NULL_PTR_RETURN_VALUE(drvData->accelCfg, HDF_ERR_INVALID_PARAM); ret = SetSensorRegCfgArray(&drvData->accelCfg->busCfg, drvData->accelCfg->regCfgGroup[SENSOR_ENABLE_GROUP]); if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: accel sensor disable config failed", __func__); + HDF_LOGE("%s: accel sensor enable config failed", __func__); return HDF_FAILURE; } @@ -209,7 +209,6 @@ static int32_t InitAccelOps(struct SensorDeviceInfo *deviceInfo) { struct AccelDrvData *drvData = AccelGetDrvData(); - (void)memset_s((void *)deviceInfo, sizeof(*deviceInfo), 0, sizeof(*deviceInfo)); deviceInfo->ops.GetInfo = SetAccelInfo; deviceInfo->ops.Enable = SetAccelEnable; deviceInfo->ops.Disable = SetAccelDisable; diff --git a/model/sensor/driver/accel/sensor_accel_driver.h b/model/sensor/driver/accel/sensor_accel_driver.h index e28b39ffc..c97df8e36 100644 --- a/model/sensor/driver/accel/sensor_accel_driver.h +++ b/model/sensor/driver/accel/sensor_accel_driver.h @@ -59,6 +59,6 @@ struct AccelDrvData { struct AccelOpsCall ops; }; -int32_t RegisterAccelChipOps(struct AccelOpsCall *ops); +int32_t RegisterAccelChipOps(const struct AccelOpsCall *ops); #endif /* SENSOR_ACCEL_DRIVER_H */ diff --git a/model/sensor/driver/chipset/accel/accel_bmi160.c b/model/sensor/driver/chipset/accel/accel_bmi160.c index 669dd0c79..f82c01290 100644 --- a/model/sensor/driver/chipset/accel/accel_bmi160.c +++ b/model/sensor/driver/chipset/accel/accel_bmi160.c @@ -25,9 +25,14 @@ static int32_t ReadBmi160RawData(struct SensorCfgData *data, struct AccelData *r OsalTimespec time; (void)memset_s(&time, sizeof(time), 0, sizeof(time)); - (void)OsalGetTime(&time); + (void)memset_s(®, sizeof(reg), 0, sizeof(reg)); + CHECK_NULL_PTR_RETURN_VALUE(data, HDF_ERR_INVALID_PARAM); + if (OsalGetTime(&time) != HDF_SUCCESS) { + HDF_LOGE("%s: Get accel system time failed", __func__); + return HDF_FAILURE; + } *timestamp = time.sec * SENSOR_SECOND_CONVERT_NANOSECOND + time.usec * SENSOR_CONVERT_UNIT; /* unit nanosecond */ int32_t ret = ReadSensor(&data->busCfg, BMI160_STATUS_ADDR, &status, sizeof(uint8_t)); @@ -36,34 +41,22 @@ static int32_t ReadBmi160RawData(struct SensorCfgData *data, struct AccelData *r } ret = ReadSensor(&data->busCfg, BMI160_ACCEL_X_LSB_ADDR, ®[ACCEL_X_AXIS_LSB], sizeof(uint8_t)); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: i2c read X_AXIS_LSB failed", __func__); - } + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "read data"); ret = ReadSensor(&data->busCfg, BMI160_ACCEL_X_MSB_ADDR, ®[ACCEL_X_AXIS_MSB], sizeof(uint8_t)); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: i2c read X_AXIS_MSB failed", __func__); - } + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "read data"); ret = ReadSensor(&data->busCfg, BMI160_ACCEL_Y_LSB_ADDR, ®[ACCEL_Y_AXIS_LSB], sizeof(uint8_t)); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: i2c read Y_AXIS_LSB failed", __func__); - } + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "read data"); ret = ReadSensor(&data->busCfg, BMI160_ACCEL_Y_MSB_ADDR, ®[ACCEL_Y_AXIS_MSB], sizeof(uint8_t)); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: i2c read Y_AXIS_MSB failed", __func__); - } + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "read data"); ret = ReadSensor(&data->busCfg, BMI160_ACCEL_Z_LSB_ADDR, ®[ACCEL_Z_AXIS_LSB], sizeof(uint8_t)); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: i2c read Z_AXIS_LSB failed", __func__); - } + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "read data"); ret = ReadSensor(&data->busCfg, BMI160_ACCEL_Z_MSB_ADDR, ®[ACCEL_Z_AXIS_MSB], sizeof(uint8_t)); - if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: i2c read Z_AXIS_MSB failed", __func__); - } + CHECK_PARSER_RESULT_RETURN_VALUE(ret, "read data"); rawData->x = (int16_t)(SENSOR_DATA_SHIFT_LEFT(reg[ACCEL_X_AXIS_MSB], SENSOR_DATA_WIDTH_8_BIT) | reg[ACCEL_X_AXIS_LSB]); @@ -78,7 +71,7 @@ static int32_t ReadBmi160RawData(struct SensorCfgData *data, struct AccelData *r int32_t ReadBmi160Data(struct SensorCfgData *data) { int32_t ret; - struct AccelData rawData = { 0, 0, 0 }; + struct AccelData rawData = { 0, 0, 0 }; int32_t tmp[ACCEL_AXIS_NUM]; struct SensorReportEvent event; @@ -114,7 +107,7 @@ static int32_t InitBmi160(struct SensorCfgData *data) CHECK_NULL_PTR_RETURN_VALUE(data, HDF_ERR_INVALID_PARAM); ret = SetSensorRegCfgArray(&data->busCfg, data->regCfgGroup[SENSOR_INIT_GROUP]); if (ret != HDF_SUCCESS) { - HDF_LOGE("%s: bmi160 sensor init config failed", __func__); + HDF_LOGE("%s: BMI160 sensor init config failed", __func__); return HDF_FAILURE; } return HDF_SUCCESS; @@ -123,11 +116,11 @@ static int32_t InitBmi160(struct SensorCfgData *data) static int32_t InitAccelPreConfig(void) { if (SetSensorPinMux(SENSOR_I2C6_DATA_REG_ADDR, SENSOR_ADDR_WIDTH_4_BYTE, SENSOR_I2C_REG_CFG) != HDF_SUCCESS) { - HDF_LOGE("%s: data write mux pin failed", __func__); + HDF_LOGE("%s: Data write mux pin failed", __func__); return HDF_FAILURE; } if (SetSensorPinMux(SENSOR_I2C6_CLK_REG_ADDR, SENSOR_ADDR_WIDTH_4_BYTE, SENSOR_I2C_REG_CFG) != HDF_SUCCESS) { - HDF_LOGE("%s: clc write mux pin failed", __func__); + HDF_LOGE("%s: ClK write mux pin failed", __func__); return HDF_FAILURE; } diff --git a/model/sensor/driver/common/include/sensor_device_manager.h b/model/sensor/driver/common/include/sensor_device_manager.h index c626ca2ba..984b221be 100644 --- a/model/sensor/driver/common/include/sensor_device_manager.h +++ b/model/sensor/driver/common/include/sensor_device_manager.h @@ -13,7 +13,7 @@ #include "sensor_driver_type.h" enum SensorMethodCmd { - SENSOR_CMD_GET_INFO_LIST = 0xFFFF, + SENSOR_CMD_GET_INFO_LIST = 0, SENSOR_CMD_ENABLE = 1, SENSOR_CMD_DISABLE = 2, SENSOR_CMD_SET_BATCH = 3, diff --git a/model/sensor/driver/common/include/sensor_parser.h b/model/sensor/driver/common/include/sensor_parser.h index f3950e37d..d69c32253 100644 --- a/model/sensor/driver/common/include/sensor_parser.h +++ b/model/sensor/driver/common/include/sensor_parser.h @@ -15,6 +15,8 @@ #include "sensor_driver_type.h" #include "spi_if.h" +#define SENSOR_CONFIG_MAX_ITEM 100 + enum SensorBusType { SENSOR_BUS_I2C = 0, SENSOR_BUS_SPI = 1, diff --git a/model/sensor/driver/common/src/sensor_common.c b/model/sensor/driver/common/src/sensor_common.c index 0c47fa037..411bf25c3 100644 --- a/model/sensor/driver/common/src/sensor_common.c +++ b/model/sensor/driver/common/src/sensor_common.c @@ -27,7 +27,6 @@ int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, uint16_t dataLen) { - uint8_t busType; int index = 0; unsigned char regBuf[I2C_REG_BUF_LEN] = {0}; struct I2cMsg msg[I2C_READ_MSG_NUM]; @@ -35,8 +34,7 @@ int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, CHECK_NULL_PTR_RETURN_VALUE(busCfg, HDF_FAILURE); CHECK_NULL_PTR_RETURN_VALUE(data, HDF_FAILURE); - busType = busCfg->busType; - if (busType == SENSOR_BUS_I2C) { + if (busCfg->busType == SENSOR_BUS_I2C) { CHECK_NULL_PTR_RETURN_VALUE(busCfg->i2cCfg.handle, HDF_FAILURE); (void)memset_s(msg, sizeof(msg), 0, sizeof(msg)); @@ -50,6 +48,9 @@ int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, } else if (busCfg->i2cCfg.regWidth == SENSOR_ADDR_WIDTH_2_BYTE) { regBuf[index++] = (regAddr >> I2C_BYTE_OFFSET) & I2C_BYTE_MASK; regBuf[index++] = regAddr & I2C_BYTE_MASK; + } else { + HDF_LOGE("%s: i2c regWidth[%u] failed", __func__, busCfg->i2cCfg.regWidth); + return HDF_FAILURE; } msg[I2C_READ_MSG_VALUE_IDX].addr = busCfg->i2cCfg.devAddr; @@ -58,7 +59,7 @@ int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, msg[I2C_READ_MSG_VALUE_IDX].buf = data; if (I2cTransfer(busCfg->i2cCfg.handle, msg, I2C_READ_MSG_NUM) != I2C_READ_MSG_NUM) { - HDF_LOGE("%s: i2c[%d] read failed", __func__, busCfg->i2cCfg.busNum); + HDF_LOGE("%s: i2c[%u] read failed", __func__, busCfg->i2cCfg.busNum); return HDF_FAILURE; } } @@ -68,16 +69,13 @@ int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, int32_t WriteSensor(struct SensorBusCfg *busCfg, uint8_t *writeData, uint16_t dataLen) { - uint8_t busType; struct I2cMsg msg[I2C_WRITE_MSG_NUM]; CHECK_NULL_PTR_RETURN_VALUE(busCfg, HDF_FAILURE); CHECK_NULL_PTR_RETURN_VALUE(writeData, HDF_FAILURE); - busType = busCfg->busType; - if (busType == SENSOR_BUS_I2C) { + if (busCfg->busType == SENSOR_BUS_I2C) { CHECK_NULL_PTR_RETURN_VALUE(busCfg->i2cCfg.handle, HDF_FAILURE); - (void)memset_s(msg, sizeof(msg), 0, sizeof(msg)); msg[0].addr = busCfg->i2cCfg.devAddr; msg[0].flags = 0; @@ -85,7 +83,7 @@ int32_t WriteSensor(struct SensorBusCfg *busCfg, uint8_t *writeData, uint16_t da msg[0].buf = writeData; if (I2cTransfer(busCfg->i2cCfg.handle, msg, I2C_WRITE_MSG_NUM) != I2C_WRITE_MSG_NUM) { - HDF_LOGE("%s: i2c[%d] write failed", __func__, busCfg->i2cCfg.busNum); + HDF_LOGE("%s: i2c[%u] write failed", __func__, busCfg->i2cCfg.busNum); return HDF_FAILURE; } } diff --git a/model/sensor/driver/common/src/sensor_device_common.c b/model/sensor/driver/common/src/sensor_device_common.c index 7816aee93..da1e2e85b 100644 --- a/model/sensor/driver/common/src/sensor_device_common.c +++ b/model/sensor/driver/common/src/sensor_device_common.c @@ -82,9 +82,8 @@ static int32_t SensorOpsReadCheck(struct SensorBusCfg *busCfg, struct SensorRegC uint16_t mask; uint16_t busMask = 0xffff; int32_t ret; - uint8_t busType = busCfg->busType; - if (busType == SENSOR_BUS_I2C) { + if (busCfg->busType == SENSOR_BUS_I2C) { ret = ReadSensor(busCfg, cfgItem->regAddr, (uint8_t *)&value, sizeof(value)); CHECK_PARSER_RESULT_RETURN_VALUE(ret, "read i2c reg"); busMask = (busCfg->i2cCfg.regWidth == SENSOR_ADDR_WIDTH_1_BYTE) ? 0x00ff : 0xffff; @@ -100,6 +99,8 @@ static int32_t SensorOpsReadCheck(struct SensorBusCfg *busCfg, struct SensorRegC static int32_t SensorOpsUpdateBitwise(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem) { + (void)busCfg; + (void)cfgItem; return HDF_SUCCESS; } @@ -114,13 +115,20 @@ static struct SensorOpsCall g_doOpsCall[] = { int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorRegCfgGroupNode *group) { int32_t num = 0; + uint32_t count; struct SensorRegCfg *cfgItem = NULL; CHECK_NULL_PTR_RETURN_VALUE(busCfg, HDF_FAILURE); CHECK_NULL_PTR_RETURN_VALUE(group, HDF_FAILURE); + CHECK_NULL_PTR_RETURN_VALUE(group->regCfgItem, HDF_FAILURE); + count = sizeof(g_doOpsCall) / sizeof(g_doOpsCall[0]); while (num < group->itemNum) { cfgItem = (group->regCfgItem + num); + if (cfgItem->opsType >= count) { + 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) { HDF_LOGE("%s: malloc sensor reg config item data failed", __func__); diff --git a/model/sensor/driver/common/src/sensor_device_manager.c b/model/sensor/driver/common/src/sensor_device_manager.c index 94c3c950c..e520262e7 100644 --- a/model/sensor/driver/common/src/sensor_device_manager.c +++ b/model/sensor/driver/common/src/sensor_device_manager.c @@ -48,6 +48,10 @@ int32_t AddSensorDevice(const struct SensorDeviceInfo *deviceInfo) if (!existSensor) { devInfoNode = (struct SensorDevInfoNode*)OsalMemCalloc(sizeof(*devInfoNode)); + if (devInfoNode == NULL) { + (void)OsalMutexUnlock(&manager->mutex); + return HDF_FAILURE; + } if (memcpy_s(&devInfoNode->devInfo, sizeof(devInfoNode->devInfo), (void *)deviceInfo, sizeof(*deviceInfo)) != EOK) { HDF_LOGE("%s: copy sensor info failed", __func__); @@ -94,7 +98,10 @@ int32_t ReportSensorEvent(const struct SensorReportEvent *events) (void)OsalMutexLock(&manager->eventMutex); struct HdfSBuf *msg = HdfSBufObtain(HDF_SENSOR_EVENT_MAX_BUF); - CHECK_NULL_PTR_RETURN_VALUE(msg, HDF_ERR_INVALID_PARAM); + if (msg == NULL) { + (void)OsalMutexUnlock(&manager->eventMutex); + return HDF_ERR_INVALID_PARAM; + } if (!HdfSbufWriteBuffer(msg, events, sizeof(*events))) { HDF_LOGE("%s: sbuf write event failed", __func__); @@ -235,6 +242,7 @@ static int32_t DispatchCmdHandle(struct SensorDeviceInfo *deviceInfo, struct Hdf { int32_t methodCmd; int32_t loop; + int32_t count; CHECK_NULL_PTR_RETURN_VALUE(data, HDF_ERR_INVALID_PARAM); @@ -248,7 +256,8 @@ static int32_t DispatchCmdHandle(struct SensorDeviceInfo *deviceInfo, struct Hdf return HDF_FAILURE; } - for (loop = 0; loop < sizeof(g_sensorCmdHandle) / sizeof(g_sensorCmdHandle[0]); ++loop) { + count = sizeof(g_sensorCmdHandle) / sizeof(g_sensorCmdHandle[0]); + for (loop = 0; loop < count; ++loop) { if ((methodCmd == g_sensorCmdHandle[loop].cmd) && (g_sensorCmdHandle[loop].func != NULL)) { return g_sensorCmdHandle[loop].func(deviceInfo, data, reply); } @@ -310,15 +319,22 @@ int32_t InitSensorDevManager(struct HdfDeviceObject *device) CHECK_NULL_PTR_RETURN_VALUE(manager, HDF_ERR_INVALID_PARAM); DListHeadInit(&manager->sensorDevInfoHead); - OsalMutexInit(&manager->mutex); - OsalMutexInit(&manager->eventMutex); + if (OsalMutexInit(&manager->mutex) != HDF_SUCCESS) { + HDF_LOGE("%s: init mutex failed", __func__); + return HDF_FAILURE; + } + + if (OsalMutexInit(&manager->eventMutex) != HDF_SUCCESS) { + HDF_LOGE("%s: init eventMutex failed", __func__); + return HDF_FAILURE; + } if (!HdfDeviceSetClass(device, DEVICE_CLASS_SENSOR)) { HDF_LOGE("%s: init sensor set class failed", __func__); return HDF_FAILURE; } - HDF_LOGI("%s: init sensor manager success", __func__); + HDF_LOGI("%s: init sensor manager successfully", __func__); return HDF_SUCCESS; } -- Gitee