IssueNo:#I3R803

Description:modify sensor module debug information
Feature or Bugfix:Bugfix
Binary Source: NO

Change-Id: Ib2934b78aef71a152d0afd118f524ab46c4d5c13
This commit is contained in:
kevin
2021-05-13 19:29:49 +08:00
parent f86f8334aa
commit 3dc0b88156
8 changed files with 60 additions and 44 deletions
@@ -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;
@@ -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 */
@@ -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(&reg, 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, &reg[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, &reg[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, &reg[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, &reg[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, &reg[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, &reg[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;
}
@@ -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,
@@ -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,
@@ -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;
}
}
@@ -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__);
@@ -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;
}