diff --git a/model/sensor/driver/accel/sensor_accel_driver.c b/model/sensor/driver/accel/sensor_accel_driver.c index b2d73c95a2fd898e51e0a7c6b896950709e1839a..5da6ee566c7b37ebef5ff5032e946abbbee1da55 100644 --- a/model/sensor/driver/accel/sensor_accel_driver.c +++ b/model/sensor/driver/accel/sensor_accel_driver.c @@ -14,9 +14,9 @@ #include "osal_mem.h" #include "osal_time.h" #include "sensor_accel_driver.h" -#include "sensor_common.h" -#include "sensor_device_common.h" +#include "sensor_config_controller.h" #include "sensor_device_manager.h" +#include "sensor_platform_if.h" #define HDF_LOG_TAG sensor_accel_driver_c diff --git a/model/sensor/driver/accel/sensor_accel_driver.h b/model/sensor/driver/accel/sensor_accel_driver.h index c97df8e36c748bca74e3b41970be67505c3c5293..c8f8bcaae38706a284d4b18ac3e141f267b20fb2 100644 --- a/model/sensor/driver/accel/sensor_accel_driver.h +++ b/model/sensor/driver/accel/sensor_accel_driver.h @@ -10,8 +10,8 @@ #define SENSOR_ACCEL_DRIVER_H #include "osal_thread.h" -#include "sensor_common.h" -#include "sensor_parser.h" +#include "sensor_config_parser.h" +#include "sensor_platform_if.h" #define ACC_DEFAULT_SAMPLING_200_MS 200000000 #define ACCEL_CHIP_NAME_BMI160 "bmi160" diff --git a/model/sensor/driver/chipset/accel/accel_bmi160.c b/model/sensor/driver/chipset/accel/accel_bmi160.c index f82c0129092b33ca8880d1263d59238c29b3ab71..afb0755d04af292763889dea64d86b9cab0c2fbc 100644 --- a/model/sensor/driver/chipset/accel/accel_bmi160.c +++ b/model/sensor/driver/chipset/accel/accel_bmi160.c @@ -10,7 +10,7 @@ #include "accel_bmi160.h" #include "osal_time.h" #include "sensor_accel_driver.h" -#include "sensor_device_common.h" +#include "sensor_config_controller.h" #include "sensor_device_manager.h" /* IO config for int-pin and I2C-pin */ @@ -25,12 +25,12 @@ static int32_t ReadBmi160RawData(struct SensorCfgData *data, struct AccelData *r OsalTimespec time; (void)memset_s(&time, sizeof(time), 0, sizeof(time)); - (void)memset_s(®, sizeof(reg), 0, sizeof(reg)); - + (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__); + HDF_LOGE("%s: Get time failed", __func__); return HDF_FAILURE; } *timestamp = time.sec * SENSOR_SECOND_CONVERT_NANOSECOND + time.usec * SENSOR_CONVERT_UNIT; /* unit nanosecond */ @@ -120,7 +120,7 @@ static int32_t InitAccelPreConfig(void) return HDF_FAILURE; } if (SetSensorPinMux(SENSOR_I2C6_CLK_REG_ADDR, SENSOR_ADDR_WIDTH_4_BYTE, SENSOR_I2C_REG_CFG) != HDF_SUCCESS) { - HDF_LOGE("%s: ClK write mux pin failed", __func__); + HDF_LOGE("%s: Clk write mux pin failed", __func__); return HDF_FAILURE; } diff --git a/model/sensor/driver/chipset/accel/accel_bmi160.h b/model/sensor/driver/chipset/accel/accel_bmi160.h index 4147f235c0a88829aab44e8a992cd0d9a2b0225e..253e4dbedcc5a6cb9595c4b825d4a5b95fc40428 100644 --- a/model/sensor/driver/chipset/accel/accel_bmi160.h +++ b/model/sensor/driver/chipset/accel/accel_bmi160.h @@ -9,7 +9,7 @@ #ifndef ACCEL_BMI160_H #define ACCEL_BMI160_H -#include "sensor_parser.h" +#include "sensor_config_parser.h" /* ACCEL DATA REGISTERS ADDR */ #define BMI160_ACCEL_X_LSB_ADDR 0X12 diff --git a/model/sensor/driver/common/include/sensor_device_common.h b/model/sensor/driver/common/include/sensor_config_controller.h similarity index 51% rename from model/sensor/driver/common/include/sensor_device_common.h rename to model/sensor/driver/common/include/sensor_config_controller.h index deda542b712930d8a1b74831ae0682a74c979e5d..9521f7dc5f53391f3da72752b108145ab546a2dd 100644 --- a/model/sensor/driver/common/include/sensor_device_common.h +++ b/model/sensor/driver/common/include/sensor_config_controller.h @@ -6,25 +6,25 @@ * See the LICENSE file in the root of this repository for complete details. */ -#ifndef SENSOR_DEVICE_COMMON_H -#define SENSOR_DEVICE_COMMON_H +#ifndef SENSOR_CONFIG_CONTROLLER_H +#define SENSOR_CONFIG_CONTROLLER_H -#include "sensor_parser.h" +#include "sensor_config_parser.h" enum SensorCalculateType { - SENSOR_CFG_CALC_TYPE_NONE = 0, - SENSOR_CFG_CALC_TYPE_SET = 1, // To Support:1.Bitwise AND "&" 2.Bitwise OR "|" - SENSOR_CFG_CALC_TYPE_REVERT = 2, // To Support:1.Bitwise REVERT '~' - SENSOR_CFG_CALC_TYPE_XOR = 3, // To Support:1.Bitwise XOR "^" - SENSOR_CFG_CALC_TYPE_LEFT_SHIFT = 4, // To Support:1.Left shift << + SENSOR_CFG_CALC_TYPE_NONE = 0, + SENSOR_CFG_CALC_TYPE_SET = 1, // To Support:1.Bitwise AND "&" 2.Bitwise OR "|" + SENSOR_CFG_CALC_TYPE_REVERT = 2, // To Support:1.Bitwise REVERT '~' + SENSOR_CFG_CALC_TYPE_XOR = 3, // To Support:1.Bitwise XOR "^" + SENSOR_CFG_CALC_TYPE_LEFT_SHIFT = 4, // To Support:1.Left shift << SENSOR_CFG_CALC_TYPE_RIGHT_SHIFT = 5, // To Support:1.Right shift >> }; enum SensorOpsType { - SENSOR_OPS_TYPE_NOP = 0, - SENSOR_OPS_TYPE_READ = 1, - SENSOR_OPS_TYPE_WRITE = 2, - SENSOR_OPS_TYPE_READ_CHECK = 3, + SENSOR_OPS_TYPE_NOP = 0, + SENSOR_OPS_TYPE_READ = 1, + SENSOR_OPS_TYPE_WRITE = 2, + SENSOR_OPS_TYPE_READ_CHECK = 3, SENSOR_OPS_TYPE_UPDATE_BITWISE = 4, }; @@ -35,4 +35,4 @@ struct SensorOpsCall { int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorRegCfgGroupNode *group); -#endif /* SENSOR_DEVICE_COMMON_H */ +#endif /* SENSOR_CONFIG_CONTROLLER_H */ diff --git a/model/sensor/driver/common/include/sensor_parser.h b/model/sensor/driver/common/include/sensor_config_parser.h similarity index 75% rename from model/sensor/driver/common/include/sensor_parser.h rename to model/sensor/driver/common/include/sensor_config_parser.h index d69c32253b4e6e3c06c8e6756668aab7210f9278..27ff0b1c4a06531e3cb7a2fb0b84fd5a8aebe84e 100644 --- a/model/sensor/driver/common/include/sensor_parser.h +++ b/model/sensor/driver/common/include/sensor_config_parser.h @@ -6,22 +6,18 @@ * See the LICENSE file in the root of this repository for complete details. */ -#ifndef SENSOR_PARSER_H -#define SENSOR_PARSER_H +#ifndef SENSOR_CONFIG_PARSER_H +#define SENSOR_CONFIG_PARSER_H #include "device_resource_if.h" #include "hdf_device_desc.h" #include "i2c_if.h" -#include "sensor_driver_type.h" +#include "sensor_device_type.h" +#include "sensor_platform_if.h" #include "spi_if.h" #define SENSOR_CONFIG_MAX_ITEM 100 -enum SensorBusType { - SENSOR_BUS_I2C = 0, - SENSOR_BUS_SPI = 1, -}; - enum SensorRegOpsType { SENSOR_INIT_GROUP = 0, SENSOR_ENABLE_GROUP, @@ -29,28 +25,6 @@ enum SensorRegOpsType { SENSOR_GROUP_MAX, }; -struct SensorI2cCfg { - DevHandle handle; - uint16_t busNum; - uint16_t devAddr; // Address of the I2C device - uint16_t regWidth; // length of the register address -}; - -struct SensorSpiCfg { - DevHandle handle; - uint32_t busNum; - uint32_t csNum; -}; - -struct SensorBusCfg { - uint8_t busType; // enum SensorBusType - uint8_t regBigEndian; - union { - struct SensorI2cCfg i2cCfg; - struct SensorSpiCfg spiCfg; - }; -}; - struct SensorAttr { const char *chipName; uint16_t chipIdReg; @@ -104,4 +78,4 @@ int32_t GetSensorBusHandle(struct SensorBusCfg *busCfg); int32_t ReleaseSensorBusHandle(struct SensorBusCfg *busCfg); int32_t DetectSensorDevice(struct SensorCfgData *config); -#endif /* SENSOR_PARSER_H */ +#endif /* SENSOR_CONFIG_PARSER_H */ diff --git a/model/sensor/driver/common/include/sensor_device_manager.h b/model/sensor/driver/common/include/sensor_device_manager.h index 984b221be98903f98b2604703055bf0a4161eab7..ba37d267471af9e948ed22e119de7f1e2133ac1d 100644 --- a/model/sensor/driver/common/include/sensor_device_manager.h +++ b/model/sensor/driver/common/include/sensor_device_manager.h @@ -10,30 +10,21 @@ #define SENSOR_DEVICE_MANAGER_H #include "osal_mutex.h" -#include "sensor_driver_type.h" +#include "sensor_device_type.h" +#include "sensor_device_if.h" -enum SensorMethodCmd { +enum SensorCmd { SENSOR_CMD_GET_INFO_LIST = 0, - SENSOR_CMD_ENABLE = 1, - SENSOR_CMD_DISABLE = 2, - SENSOR_CMD_SET_BATCH = 3, - SENSOR_CMD_SET_MODE = 4, - SENSOR_CMD_SET_OPTION = 5, - SENSOR_CMD_BUTT, + SENSOR_CMD_OPS = 1, + SENSOR_CMD_END, }; - -struct SensorOps { - int32_t (*GetInfo)(struct SensorBasicInfo *sensorInfo); - int32_t (*Enable)(void); - int32_t (*Disable)(void); - int32_t (*SetBatch)(int64_t samplingInterval, int64_t reportInterval); - int32_t (*SetMode)(int32_t mode); - int32_t (*SetOption)(uint32_t option); -}; - -struct SensorDeviceInfo { - struct SensorBasicInfo sensorInfo; - struct SensorOps ops; +enum SensorOpsCmd { + SENSOR_OPS_CMD_ENABLE = 1, + SENSOR_OPS_CMD_DISABLE = 2, + SENSOR_OPS_CMD_SET_BATCH = 3, + SENSOR_OPS_CMD_SET_MODE = 4, + SENSOR_OPS_CMD_SET_OPTION = 5, + SENSOR_OPS_CMD_BUTT, }; struct SensorDevInfoNode { @@ -41,10 +32,10 @@ struct SensorDevInfoNode { struct DListHead node; }; -typedef int32_t (*SensorCmdHandle)(struct SensorDeviceInfo *info, struct HdfSBuf *reqData, struct HdfSBuf *reply); +typedef int32_t (*SensorCmdHandle)(struct SensorDeviceInfo *info, struct HdfSBuf *data, struct HdfSBuf *reply); struct SensorCmdHandleList { - enum SensorMethodCmd cmd; + enum SensorOpsCmd cmd; SensorCmdHandle func; }; @@ -56,8 +47,4 @@ struct SensorDevMgrData { struct OsalMutex eventMutex; }; -int32_t AddSensorDevice(const struct SensorDeviceInfo *deviceInfo); -int32_t DeleteSensorDevice(int32_t sensorId); -int32_t ReportSensorEvent(const struct SensorReportEvent *events); - #endif /* SENSOR_DEVICE_MANAGER_H */ diff --git a/model/sensor/driver/common/src/sensor_device_common.c b/model/sensor/driver/common/src/sensor_config_controller.c similarity index 96% rename from model/sensor/driver/common/src/sensor_device_common.c rename to model/sensor/driver/common/src/sensor_config_controller.c index da1e2e85b178b850bfe1121d328bd2ab4aba317c..777aac60adb38578c20bc63a38c0e554badafe62 100644 --- a/model/sensor/driver/common/src/sensor_device_common.c +++ b/model/sensor/driver/common/src/sensor_config_controller.c @@ -9,10 +9,10 @@ #include "securec.h" #include "osal_mem.h" #include "osal_time.h" -#include "sensor_common.h" -#include "sensor_device_common.h" +#include "sensor_config_controller.h" +#include "sensor_platform_if.h" -#define HDF_LOG_TAG sensor_common_handler_c +#define HDF_LOG_TAG sensor_config_controller_c static int32_t SensorOpsNop(struct SensorBusCfg *busCfg, struct SensorRegCfg *cfgItem) { @@ -83,6 +83,8 @@ static int32_t SensorOpsReadCheck(struct SensorBusCfg *busCfg, struct SensorRegC uint16_t busMask = 0xffff; int32_t ret; + CHECK_NULL_PTR_RETURN_VALUE(busCfg, HDF_FAILURE); + 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"); @@ -123,6 +125,7 @@ int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorReg 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) { diff --git a/model/sensor/driver/common/src/sensor_parser.c b/model/sensor/driver/common/src/sensor_config_parser.c similarity index 91% rename from model/sensor/driver/common/src/sensor_parser.c rename to model/sensor/driver/common/src/sensor_config_parser.c index 96392aca84d39f0636a6cfaebd04b6454f503aef..c91f8d0ee6a725d0a9ea04e5d1f5d3f8c905aa53 100644 --- a/model/sensor/driver/common/src/sensor_parser.c +++ b/model/sensor/driver/common/src/sensor_config_parser.c @@ -9,8 +9,8 @@ #include "securec.h" #include "device_resource_if.h" #include "osal_mem.h" -#include "sensor_common.h" -#include "sensor_parser.h" +#include "sensor_config_parser.h" +#include "sensor_platform_if.h" #define HDF_LOG_TAG sensor_config_parser_c @@ -22,22 +22,18 @@ static char *g_sensorRegGroupName[SENSOR_GROUP_MAX] = { static uint32_t GetSensorRegGroupNameIndex(const char *name) { - uint32_t index = 0xFF; + uint32_t index; if (name == NULL) { - return index; + return SENSOR_GROUP_MAX; } for (index = 0; index < SENSOR_GROUP_MAX; ++index) { - if (strcmp(name, g_sensorRegGroupName[index]) == 0) { + if ((g_sensorRegGroupName[index] != NULL) && (strcmp(name, g_sensorRegGroupName[index]) == 0)) { break; } } - if (index == SENSOR_GROUP_MAX) { - index = 0xFF; - } - return index; } @@ -73,6 +69,11 @@ static int32_t ParseSensorRegItem(struct DeviceResourceIface *parser, const stru CHECK_NULL_PTR_RETURN_VALUE(groupName, HDF_ERR_INVALID_PARAM); int32_t num = parser->GetElemNum(regNode, groupName); + if (num <= 0 || num > SENSOR_CONFIG_MAX_ITEM) { + HDF_LOGE("%s: parser %s element num failed", __func__, groupName); + return HDF_SUCCESS; + } + uint16_t *buf = (uint16_t *)OsalMemCalloc(sizeof(uint16_t) * num); CHECK_NULL_PTR_RETURN_VALUE(buf, HDF_ERR_MALLOC_FAIL); @@ -196,11 +197,28 @@ int32_t GetSensorBusHandle(struct SensorBusCfg *busCfg) if (busCfg->busType == SENSOR_BUS_I2C) { int16_t busNum = busCfg->i2cCfg.busNum; busCfg->i2cCfg.handle = I2cOpen(busNum); - if (busCfg->i2cCfg.handle == NULL) { HDF_LOGE("%s: sensor i2c Handle invalid", __func__); return HDF_FAILURE; } + } else if (busCfg->busType == SENSOR_BUS_SPI) { + struct SpiDevInfo spiDevinfo; + struct SpiCfg cfg; + int32_t ret; + + spiDevinfo.busNum = busCfg->spiCfg.busNum; + spiDevinfo.csNum = busCfg->spiCfg.csNum; + busCfg->i2cCfg.handle = SpiOpen(&spiDevinfo); + + cfg.mode = SPI_CLK_PHASE | SPI_CLK_POLARITY; + cfg.bitsPerWord = SENSOR_DATA_WIDTH_8_BIT; + cfg.maxSpeedHz = SENSOR_SPI_MAX_SPEED; + ret = SpiSetCfg(busCfg->i2cCfg.handle, &cfg); + if (ret != HDF_SUCCESS) { + HDF_LOGE("%s: SpiSetCfg failed", __func__); + SpiClose(busCfg->i2cCfg.handle); + return ret; + } } return HDF_SUCCESS; @@ -215,6 +233,9 @@ int32_t ReleaseSensorBusHandle(struct SensorBusCfg *busCfg) if (busCfg->busType == SENSOR_BUS_I2C && busCfg->i2cCfg.handle != NULL) { I2cClose(busCfg->i2cCfg.handle); busCfg->i2cCfg.handle = NULL; + } else if (busCfg->busType == SENSOR_BUS_SPI) { + SpiClose(busCfg->spiCfg.handle); + busCfg->spiCfg.handle = NULL; } return HDF_SUCCESS; @@ -246,7 +267,7 @@ int32_t DetectSensorDevice(struct SensorCfgData *config) } if (value != chipIdValue) { - HDF_LOGE("%s: sensor chip[0x%x] id [0x%x] detect value[%d]", __func__, chipIdReg, chipIdValue, value); + HDF_LOGE("%s: sensor chip[0x%x] id [0x%x] detect value[%u]", __func__, chipIdReg, chipIdValue, value); (void)ReleaseSensorBusHandle(&config->busCfg); return HDF_FAILURE; } @@ -379,4 +400,4 @@ int32_t GetSensorBaseConfigData(const struct DeviceResourceNode *node, struct Se CHECK_PARSER_RESULT_RETURN_VALUE(ret, "accelAttr"); return HDF_SUCCESS; -} +} \ No newline at end of file diff --git a/model/sensor/driver/common/src/sensor_device_manager.c b/model/sensor/driver/common/src/sensor_device_manager.c index e520262e7a567e0c22c6af12b2dfdeda73b1bd42..3ef8e7e09a516aae374a0b9b08cc2f421416a283 100644 --- a/model/sensor/driver/common/src/sensor_device_manager.c +++ b/model/sensor/driver/common/src/sensor_device_manager.c @@ -11,8 +11,8 @@ #include "hdf_base.h" #include "hdf_device_desc.h" #include "osal_mem.h" -#include "sensor_common.h" #include "sensor_device_manager.h" +#include "sensor_platform_if.h" #define HDF_LOG_TAG sensor_device_manager_c @@ -231,11 +231,11 @@ static int32_t SetOption(struct SensorDeviceInfo *deviceInfo, struct HdfSBuf *da } static struct SensorCmdHandleList g_sensorCmdHandle[] = { - {SENSOR_CMD_ENABLE, Enable}, // SENSOR_CMD_ENABLE - {SENSOR_CMD_DISABLE, Disable}, // SENSOR_CMD_DISABLE - {SENSOR_CMD_SET_BATCH, SetBatch}, // SENSOR_CMD_SET_BATCH - {SENSOR_CMD_SET_MODE, SetMode}, // SENSOR_CMD_SET_MODE - {SENSOR_CMD_SET_OPTION, SetOption}, // SENSOR_CMD_SET_OPTION + {SENSOR_OPS_CMD_ENABLE, Enable}, // SENSOR_CMD_ENABLE + {SENSOR_OPS_CMD_DISABLE, Disable}, // SENSOR_CMD_DISABLE + {SENSOR_OPS_CMD_SET_BATCH, SetBatch}, // SENSOR_CMD_SET_BATCH + {SENSOR_OPS_CMD_SET_MODE, SetMode}, // SENSOR_CMD_SET_MODE + {SENSOR_OPS_CMD_SET_OPTION, SetOption}, // SENSOR_CMD_SET_OPTION }; static int32_t DispatchCmdHandle(struct SensorDeviceInfo *deviceInfo, struct HdfSBuf *data, struct HdfSBuf *reply) @@ -251,7 +251,7 @@ static int32_t DispatchCmdHandle(struct SensorDeviceInfo *deviceInfo, struct Hdf return HDF_FAILURE; } - if (methodCmd >= SENSOR_CMD_BUTT || methodCmd <= 0) { + if (methodCmd >= SENSOR_OPS_CMD_BUTT || methodCmd <= 0) { HDF_LOGE("%s: invalid cmd = %d", __func__, methodCmd); return HDF_FAILURE; } @@ -266,25 +266,28 @@ static int32_t DispatchCmdHandle(struct SensorDeviceInfo *deviceInfo, struct Hdf return HDF_FAILURE; } -#define SENSOR_ID_CMD_INFO_LIST 0xFFFF static int32_t DispatchSensor(struct HdfDeviceIoClient *client, int32_t cmd, struct HdfSBuf *data, struct HdfSBuf *reply) { struct SensorDevMgrData *manager = GetSensorDeviceManager(); struct SensorDevInfoNode *pos = NULL; - struct SensorDevInfoNode *tmp = NULL; + int32_t sensorId; int32_t ret = HDF_FAILURE; CHECK_NULL_PTR_RETURN_VALUE(manager, HDF_ERR_INVALID_PARAM); CHECK_NULL_PTR_RETURN_VALUE(client, HDF_ERR_INVALID_PARAM); - if (cmd == SENSOR_ID_CMD_INFO_LIST) { + if (cmd == SENSOR_CMD_GET_INFO_LIST) { return GetAllSensorInfo(data, reply); } (void)OsalMutexLock(&manager->mutex); - DLIST_FOR_EACH_ENTRY_SAFE(pos, tmp, &manager->sensorDevInfoHead, struct SensorDevInfoNode, node) { - if (cmd == pos->devInfo.sensorInfo.sensorId) { + DLIST_FOR_EACH_ENTRY(pos, &manager->sensorDevInfoHead, struct SensorDevInfoNode, node) { + if (!HdfSbufReadInt32(data, &sensorId)) { + HDF_LOGE("%s: sbuf read sensorId failed", __func__); + continue; + } + if (sensorId == pos->devInfo.sensorInfo.sensorId) { ret = DispatchCmdHandle(&pos->devInfo, data, reply); break; } diff --git a/model/sensor/driver/common/src/sensor_common.c b/model/sensor/driver/common/src/sensor_platform_if.c similarity index 90% rename from model/sensor/driver/common/src/sensor_common.c rename to model/sensor/driver/common/src/sensor_platform_if.c index 411bf25c3de5abf86f6aa5d4530f5cb40a9ee70d..8716ee83ae3a540e339e8826cab98877a7253696 100644 --- a/model/sensor/driver/common/src/sensor_common.c +++ b/model/sensor/driver/common/src/sensor_platform_if.c @@ -10,9 +10,9 @@ #include "osal_io.h" #include "osal_thread.h" #include "osal_time.h" -#include "sensor_common.h" +#include "sensor_platform_if.h" -#define HDF_LOG_TAG sensor_common_operation_c +#define HDF_LOG_TAG sensor_platform_if_c #define I2C_READ_MSG_NUM 2 #define I2C_READ_MSG_ADDR_IDX 0 @@ -36,7 +36,6 @@ int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, 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[I2C_READ_MSG_ADDR_IDX].addr = busCfg->i2cCfg.devAddr; msg[I2C_READ_MSG_ADDR_IDX].flags = 0; @@ -62,6 +61,11 @@ int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, HDF_LOGE("%s: i2c[%u] read failed", __func__, busCfg->i2cCfg.busNum); return HDF_FAILURE; } + } else if (busCfg->busType == SENSOR_BUS_SPI) { + if (SpiRead(busCfg->spiCfg.handle, data, dataLen) != HDF_SUCCESS) { + HDF_LOGE("%s: spi read failed", __func__); + return HDF_FAILURE; + } } return HDF_SUCCESS; @@ -86,6 +90,11 @@ int32_t WriteSensor(struct SensorBusCfg *busCfg, uint8_t *writeData, uint16_t da HDF_LOGE("%s: i2c[%u] write failed", __func__, busCfg->i2cCfg.busNum); return HDF_FAILURE; } + } else if (busCfg->busType == SENSOR_BUS_SPI) { + if (SpiWrite(busCfg->spiCfg.handle, writeData, dataLen) != HDF_SUCCESS) { + HDF_LOGE("%s: spi write failed", __func__); + return HDF_FAILURE; + } } return HDF_SUCCESS; @@ -161,4 +170,4 @@ void DestroySensorThread(struct OsalThread *thread, uint8_t *status) OsalThreadDestroy(thread); *status = SENSOR_THREAD_DESTROY; -} +} \ No newline at end of file diff --git a/model/sensor/driver/include/sensor_device_if.h b/model/sensor/driver/include/sensor_device_if.h new file mode 100644 index 0000000000000000000000000000000000000000..6d437f621fd825ac40bf17bad0ab0b702b917a81 --- /dev/null +++ b/model/sensor/driver/include/sensor_device_if.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020-2021 Huawei Device Co., Ltd. + * + * HDF is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * See the LICENSE file in the root of this repository for complete details. + */ + +#ifndef SENSOR_DEVICE_IF_H +#define SENSOR_DEVICE_IF_H + +#include "sensor_device_type.h" + +struct SensorOps { + int32_t (*GetInfo)(struct SensorBasicInfo *sensorInfo); + int32_t (*Enable)(void); + int32_t (*Disable)(void); + int32_t (*SetBatch)(int64_t samplingInterval, int64_t reportInterval); + int32_t (*SetMode)(int32_t mode); + int32_t (*SetOption)(uint32_t option); +}; + +struct SensorDeviceInfo { + struct SensorBasicInfo sensorInfo; + struct SensorOps ops; +}; + +int32_t AddSensorDevice(const struct SensorDeviceInfo *deviceInfo); +int32_t DeleteSensorDevice(int32_t sensorId); +int32_t ReportSensorEvent(const struct SensorReportEvent *events); + +#endif /* SENSOR_DEVICE_IF_H */ diff --git a/model/sensor/driver/include/sensor_driver_type.h b/model/sensor/driver/include/sensor_device_type.h similarity index 97% rename from model/sensor/driver/include/sensor_driver_type.h rename to model/sensor/driver/include/sensor_device_type.h index ef2d3c70a22624516564bf4b45496487f5c1520c..f9684b535e353b7b6792d82de26e1485ffd41251 100644 --- a/model/sensor/driver/include/sensor_driver_type.h +++ b/model/sensor/driver/include/sensor_device_type.h @@ -6,8 +6,8 @@ * See the LICENSE file in the root of this repository for complete details. */ -#ifndef SENSOR_DRIVER_TYPE_H -#define SENSOR_DRIVER_TYPE_H +#ifndef SENSOR_DEVICE_TYPE_H +#define SENSOR_DEVICE_TYPE_H #include "hdf_base.h" @@ -37,7 +37,7 @@ enum SensorWorkMode { }; enum SensorTag { - SENSOR_TAG_NONE = 0, /**< No sensor type for sensor test*/ + SENSOR_TAG_NONE = 0, /**< No sensor type for sensor test */ SENSOR_TAG_ACCELEROMETER = 1, /**< Acceleration sensor */ SENSOR_TAG_GYROSCOPE = 2, /**< Gyroscope sensor */ SENSOR_TAG_PHOTOPLETHYSMOGRAPH = 3, /**< Photoplethysmography sensor */ @@ -99,4 +99,4 @@ struct SensorReportEvent { uint32_t dataLen; /**< Sensor data length */ }; -#endif /* SENSOR_DRIVER_TYPE_H */ +#endif /* SENSOR_DEVICE_TYPE_H */ diff --git a/model/sensor/driver/include/sensor_common.h b/model/sensor/driver/include/sensor_platform_if.h similarity index 77% rename from model/sensor/driver/include/sensor_common.h rename to model/sensor/driver/include/sensor_platform_if.h index 406b856d8c72f02de4b1663e262e65877cbb5381..349d3872ef2c9b423922cacc7cbb1963f5841023 100644 --- a/model/sensor/driver/include/sensor_common.h +++ b/model/sensor/driver/include/sensor_platform_if.h @@ -6,13 +6,13 @@ * See the LICENSE file in the root of this repository for complete details. */ -#ifndef SENSOR_COMMON_H -#define SENSOR_COMMON_H +#ifndef SENSOR_PLATFORM_IF_H +#define SENSOR_PLATFORM_IF_H #include "hdf_log.h" #include "i2c_if.h" +#include "spi_if.h" #include "osal_thread.h" -#include "sensor_parser.h" #define CHECK_NULL_PTR_RETURN_VALUE(ptr, ret) do { \ if ((ptr) == NULL) { \ @@ -44,11 +44,38 @@ #define SENSOR_DATA_WIDTH_8_BIT 8 // 8 bit #define SENSOR_CONVERT_UNIT 1000 #define SENSOR_1K_UNIT 1024 +#define SENSOR_SPI_MAX_SPEED 115200 #define SENSOR_SECOND_CONVERT_NANOSECOND (SENSOR_CONVERT_UNIT * SENSOR_CONVERT_UNIT * SENSOR_CONVERT_UNIT) #define MAX_SENSOR_EXIT_THREAD_COUNT 10 #define MAX_SENSOR_WAIT_THREAD_TIME 100 // 100MS -typedef int (*sensorEntry)(void *); + +enum SensorBusType { + SENSOR_BUS_I2C = 0, + SENSOR_BUS_SPI = 1, +}; + +struct SensorI2cCfg { + DevHandle handle; + uint16_t busNum; + uint16_t devAddr; // Address of the I2C device + uint16_t regWidth; // length of the register address +}; + +struct SensorSpiCfg { + DevHandle handle; + uint32_t busNum; + uint32_t csNum; +}; + +struct SensorBusCfg { + uint8_t busType; // enum SensorBusType + uint8_t regBigEndian; + union { + struct SensorI2cCfg i2cCfg; + struct SensorSpiCfg spiCfg; + }; +}; enum SensorThreadStatus { SENSOR_THREAD_NONE = 0, @@ -72,4 +99,4 @@ int32_t SetSensorPinMux(uint32_t regAddr, int32_t regSize, uint32_t regValue); int32_t CreateSensorThread(struct OsalThread *thread, OsalThreadEntry threadEntry, char *name, void *entryPara); void DestroySensorThread(struct OsalThread *thread, uint8_t *status); -#endif /* SENSOR_COMMON_H */ \ No newline at end of file +#endif /* SENSOR_PLATFORM_IF_H */ \ No newline at end of file diff --git a/test/unittest/sensor/hdf_sensor_test.c b/test/unittest/sensor/hdf_sensor_test.c index 09f5485d437344eb780c9ad89fc826b21fda9be7..5ff416e8f5eae9db590e0679087a9496bf4b8201 100644 --- a/test/unittest/sensor/hdf_sensor_test.c +++ b/test/unittest/sensor/hdf_sensor_test.c @@ -13,9 +13,9 @@ #include "osal_math.h" #include "osal_time.h" #include "osal_timer.h" -#include "sensor_common.h" +#include "sensor_platform_if.h" #include "sensor_device_manager.h" -#include "sensor_driver_type.h" +#include "sensor_device_type.h" #define HDF_LOG_TAG hdf_sensor_test_c