!423 霍尔增加延时工作队列

Merge pull request !423 from jifengfei/master
This commit is contained in:
openharmony_ci
2021-11-26 09:12:43 +00:00
committed by Gitee
2 changed files with 34 additions and 5 deletions
+33 -5
View File
@@ -88,6 +88,28 @@ static void HallDataWorkEntry(void *arg)
}
}
static int32_t ParserHallDelayedConfigData(const struct DeviceResourceNode *node, struct HallDrvData *drvData)
{
int32_t ret;
struct DeviceResourceIface *parser = NULL;
CHECK_NULL_PTR_RETURN_VALUE(node, HDF_ERR_INVALID_PARAM);
CHECK_NULL_PTR_RETURN_VALUE(drvData, HDF_ERR_INVALID_PARAM);
parser = DeviceResourceGetIfaceInstance(HDF_CONFIG_SOURCE);
CHECK_NULL_PTR_RETURN_VALUE(parser, HDF_ERR_INVALID_PARAM);
CHECK_NULL_PTR_RETURN_VALUE(parser->GetChildNode, HDF_ERR_INVALID_PARAM);
const struct DeviceResourceNode *delayedNode = parser->GetChildNode(node, "hallDelayedConfig");
CHECK_NULL_PTR_RETURN_VALUE(delayedNode, HDF_ERR_INVALID_PARAM);
ret = parser->GetUint32(delayedNode, "delayedTime", (uint32_t *)&drvData->delayTime, 0);
CHECK_PARSER_RESULT_RETURN_VALUE(ret, "delayedTime");
return HDF_SUCCESS;
}
static int32_t HallNorthPolarityIrqFunc(uint16_t gpio, void *data)
{
(void)gpio;
@@ -107,8 +129,8 @@ static int32_t HallNorthPolarityIrqFunc(uint16_t gpio, void *data)
drvData->status = 0;
}
if (!HdfAddWork(&drvData->hallWorkQueue, &drvData->hallWork)) {
HDF_LOGE("%s: Hall north add work queue failed", __func__);
if (!HdfAddDelayedWork(&drvData->hallWorkQueue, &drvData->hallWork, drvData->delayTime)) {
HDF_LOGE("%s: Hall north add delay work queue failed", __func__);
}
return HDF_SUCCESS;
@@ -133,8 +155,8 @@ static int32_t HallSouthPolarityIrqFunc(uint16_t gpio, void *data)
drvData->status = 0;
}
if (!HdfAddWork(&drvData->hallWorkQueue, &drvData->hallWork)) {
HDF_LOGE("%s: Hall south add work queue failed", __func__);
if (!HdfAddDelayedWork(&drvData->hallWorkQueue, &drvData->hallWork,drvData->delayTime)) {
HDF_LOGE("%s: Hall south add delay work queue failed", __func__);
}
return HDF_SUCCESS;
@@ -147,7 +169,7 @@ static int32_t InitHallData(struct HallDrvData *drvData)
return HDF_FAILURE;
}
if (HdfWorkInit(&drvData->hallWork, HallDataWorkEntry, drvData) != HDF_SUCCESS) {
if (HdfDelayedWorkInit(&drvData->hallWork, HallDataWorkEntry, drvData) != HDF_SUCCESS) {
HDF_LOGE("%s: Hall create thread failed", __func__);
return HDF_FAILURE;
}
@@ -318,6 +340,12 @@ static int32_t InitHallAfterDetected(const struct DeviceResourceNode *node, stru
return HDF_FAILURE;
}
if (ParserHallDelayedConfigData(node, drvData) != HDF_SUCCESS) {
HDF_LOGE("%s: get hall delayed config failed", __func__);
(void)DeleteSensorDevice(&drvData->hallCfg->sensorInfo);
return HDF_FAILURE;
}
return HDF_SUCCESS;
}
@@ -31,6 +31,7 @@ struct HallDrvData {
struct SensorCfgData *hallCfg;
struct HallOpsCall ops;
uint16_t status;
uint32_t delayTime;
};
int32_t HallRegisterChipOps(const struct HallOpsCall *ops);