From 6332a3e1136a33e741965709c23098219166cbdd Mon Sep 17 00:00:00 2001 From: kevin Date: Tue, 22 Jun 2021 17:32:20 +0800 Subject: [PATCH] modify vibrator driver Signed-off-by: kevin --- model/misc/vibrator/driver/include/vibrator_haptic.h | 9 +++++++-- model/misc/vibrator/driver/src/vibrator_driver.c | 10 +++++----- model/misc/vibrator/driver/src/vibrator_haptic.c | 8 ++++++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/model/misc/vibrator/driver/include/vibrator_haptic.h b/model/misc/vibrator/driver/include/vibrator_haptic.h index 842e3696..ef03c138 100644 --- a/model/misc/vibrator/driver/include/vibrator_haptic.h +++ b/model/misc/vibrator/driver/include/vibrator_haptic.h @@ -16,12 +16,17 @@ #include "osal_thread.h" #include "vibrator_driver_type.h" - enum VibratorEffectType { VIBRATOR_TYPE_EFFECT = 0, // Preset effect in device VIBRATOR_TYPE_TIME = 1, // Preset effect by time }; +enum VibratorTimeSeqIndex { + VIBRATOR_TIME_DELAY_INDEX = 0, + VIBRATOR_TIME_DURATION_INDEX = 1, + VIBRATOR_TIME_INDEX_BUTT, +}; + struct VibratorEffectNode { const char *effect; int32_t num; @@ -42,7 +47,7 @@ struct VibratorHapticData { struct OsalSem hapticSem; struct OsalThread hapticThread; bool threadExitFlag; - uint32_t duration; + uint32_t duration[VIBRATOR_TIME_INDEX_BUTT]; int32_t effectType; int32_t seqCount; uint32_t *currentEffectSeq; diff --git a/model/misc/vibrator/driver/src/vibrator_driver.c b/model/misc/vibrator/driver/src/vibrator_driver.c index 7f90f01f..b8b21356 100644 --- a/model/misc/vibrator/driver/src/vibrator_driver.c +++ b/model/misc/vibrator/driver/src/vibrator_driver.c @@ -44,10 +44,7 @@ void VibratorTimerEntry(uintptr_t para) { struct VibratorDriverData *drvData = (struct VibratorDriverData *)para; - (void)OsalMutexLock(&drvData->mutex); drvData->state = VIBRATOR_STATE_STOP; - (void)OsalMutexUnlock(&drvData->mutex); - HdfAddWork(&drvData->workQueue, &drvData->work); } @@ -60,12 +57,14 @@ int32_t StartTimeVibrator(uint32_t time) (void)OsalMutexLock(&drvData->mutex); drvData->state = VIBRATOR_STATE_START_TIMER; if (OsalTimerSetTimeout(&drvData->timer, time) != HDF_SUCCESS) { - HDF_LOGE("%s: set vibrator time fail!", __func__); + HDF_LOGE("%s: set vibrator osal timeout fail!", __func__); + (void)OsalMutexUnlock(&drvData->mutex); return HDF_FAILURE; } - if (OsalTimerStartOnce(&drvData->timer) != HDF_FAILURE) { + if (OsalTimerStartOnce(&drvData->timer) != HDF_SUCCESS) { HDF_LOGE("%s: set vibrator time fail!", __func__); + (void)OsalMutexUnlock(&drvData->mutex); return HDF_FAILURE; } (void)OsalMutexUnlock(&drvData->mutex); @@ -98,6 +97,7 @@ int32_t SetEffectVibrator(uint32_t type) ret = drvData->ops.StartEffect(type); if (ret != HDF_SUCCESS) { HDF_LOGE("%s: start effect fail", __func__); + (void)OsalMutexUnlock(&drvData->mutex); return HDF_FAILURE; } } diff --git a/model/misc/vibrator/driver/src/vibrator_haptic.c b/model/misc/vibrator/driver/src/vibrator_haptic.c index 4fda2a35..94279e96 100644 --- a/model/misc/vibrator/driver/src/vibrator_haptic.c +++ b/model/misc/vibrator/driver/src/vibrator_haptic.c @@ -156,7 +156,7 @@ static int32_t DelayTimeForEffect(struct OsalSem *sem, uint32_t time) static int32_t HapticThreadEntry(void *para) { int32_t count; - int32_t index = 1; + int32_t index = 0; uint32_t delaytime; uint32_t effect; struct VibratorHapticData *hapticData = NULL; @@ -227,6 +227,7 @@ int32_t InitVibratorHaptic(struct HdfDeviceObject *device) // get haptic hcs if (ParserVibratorHapticConfig(device->property) != HDF_SUCCESS) { + hapticData->threadExitFlag = true; HDF_LOGE("%s: parser haptic config fail!", __func__); goto EXIT; } @@ -248,8 +249,11 @@ static int32_t GetHapticSeqByEffect(struct VibratorEffectCfg *effectCfg) if (effectCfg->cfgMode == VIBRATOR_MODE_ONCE) { (void)OsalMutexLock(&hapticData->mutex); - hapticData->duration = effectCfg->duration; + hapticData->duration[VIBRATOR_TIME_DELAY_INDEX] = 0; + hapticData->duration[VIBRATOR_TIME_DURATION_INDEX] = effectCfg->duration; hapticData->effectType = VIBRATOR_TYPE_TIME; + hapticData->seqCount = VIBRATOR_TIME_INDEX_BUTT; + hapticData->currentEffectSeq = &hapticData->duration[0]; (void)OsalMutexUnlock(&hapticData->mutex); } else if (effectCfg->cfgMode == VIBRATOR_MODE_PRESET) { if (effectCfg->effect == NULL) {