mirror of
https://github.com/openharmony/drivers_framework.git
synced 2026-07-18 15:54:30 -04:00
IssueNo:#I3R803
Description:modify sensor module debug information Feature or Bugfix:Bugfix Binary Source: NO Change-Id: Ib2934b78aef71a152d0afd118f524ab46c4d5c13
This commit is contained in:
@@ -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(®, 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user