@@ -65,7 +65,10 @@ static constexpr uint32_t WAVEFORM_LOW_TICK_INDEX = 10;
6565static constexpr uint32_t WAVEFORM_SONY_THUD_INDEX = 11 ;
6666static constexpr uint32_t WAVEFORM_SONY_POP_INDEX = 12 ;
6767static constexpr uint32_t WAVEFORM_SONY_HEAVY_CLICK_INDEX = 13 ;
68+
69+ #ifndef USE_COMPOUND_DOUBLE_CLICK_EFFECT
6870static constexpr uint32_t WAVEFORM_SONY_DOUBLE_CLICK_INDEX = 19 ;
71+ #endif // USE_COMPOUND_DOUBLE_CLICK_EFFECT
6972
7073static constexpr uint32_t WAVEFORM_UNSAVED_TRIGGER_QUEUE_INDEX = 65529 ;
7174static constexpr uint32_t WAVEFORM_TRIGGER_QUEUE_INDEX = 65534 ;
@@ -456,11 +459,14 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector<CompositeEffect>& composi
456459 return ndk::ScopedAStatus::fromExceptionCode (EX_ILLEGAL_ARGUMENT);
457460 }
458461
462+ #ifdef USE_EFFECT_DURATION_POLLING
459463 // Reset the mTotalDuration
460464 {
461465 const std::scoped_lock<std::mutex> lock (mTotalDurationMutex );
462466 mTotalDuration = 0 ;
463467 }
468+ #endif // USE_EFFECT_DURATION_POLLING
469+
464470 for (auto & e : composite) {
465471 if (e.scale < 0 .0f || e.scale > 1 .0f ) {
466472 return ndk::ScopedAStatus::fromExceptionCode (EX_ILLEGAL_ARGUMENT);
@@ -471,10 +477,13 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector<CompositeEffect>& composi
471477 return ndk::ScopedAStatus::fromExceptionCode (EX_ILLEGAL_ARGUMENT);
472478 }
473479 effectBuilder << e.delayMs << " ," ;
480+
481+ #ifdef USE_EFFECT_DURATION_POLLING
474482 {
475483 const std::scoped_lock<std::mutex> lock (mTotalDurationMutex );
476484 mTotalDuration += e.delayMs ;
477485 }
486+ #endif // USE_EFFECT_DURATION_POLLING
478487 }
479488 if (e.primitive != CompositePrimitive::NOOP) {
480489 ndk::ScopedAStatus status;
@@ -485,11 +494,13 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector<CompositeEffect>& composi
485494 return status;
486495 }
487496
497+ #ifdef USE_EFFECT_DURATION_POLLING
488498 effectBuilder << effectIndex << " ." << intensityToVolLevel (e.scale , effectIndex) << " ," ;
489499 {
490500 const std::scoped_lock<std::mutex> lock (mTotalDurationMutex );
491501 mTotalDuration += mEffectDurations [effectIndex];
492502 }
503+ #endif // USE_EFFECT_DURATION_POLLING
493504 }
494505 }
495506
@@ -520,6 +531,8 @@ ndk::ScopedAStatus Vibrator::on(uint32_t timeoutMs, uint32_t effectIndex,
520531 mHwApi ->setEffectIndex (effectIndex);
521532 mHwApi ->setDuration (timeoutMs);
522533 mHwApi ->setActivate (1 );
534+
535+ #ifdef USE_EFFECT_DURATION_POLLING
523536 usleep (10000 );
524537 // Using the mToalDuration for composed effect.
525538 // For composed effect, we set the UINT32_MAX to the duration sysfs node,
@@ -528,6 +541,7 @@ ndk::ScopedAStatus Vibrator::on(uint32_t timeoutMs, uint32_t effectIndex,
528541 const std::scoped_lock<std::mutex> lock (mTotalDurationMutex );
529542 mTotalDuration = timeoutMs;
530543 }
544+ #endif // USE_EFFECT_DURATION_POLLING
531545
532546 mActiveId = effectIndex;
533547
@@ -926,10 +940,14 @@ ndk::ScopedAStatus Vibrator::composePwle(const std::vector<PrimitivePwle>& compo
926940
927941 totalDuration += MAX_COLD_START_LATENCY_MS;
928942 mHwApi ->setDuration (totalDuration);
943+
944+ #ifdef USE_EFFECT_DURATION_POLLING
929945 {
930946 const std::scoped_lock<std::mutex> lock (mTotalDurationMutex );
931947 mTotalDuration = totalDuration;
932948 }
949+ #endif // USE_EFFECT_DURATION_POLLING
950+
933951 mHwApi ->setActivate (1 );
934952
935953 mAsyncHandle = std::async (&Vibrator::waitForComplete, this , callback);
@@ -1015,25 +1033,30 @@ ndk::ScopedAStatus Vibrator::getSimpleDetails(Effect effect, EffectStrength stre
10151033 case Effect::HEAVY_CLICK:
10161034 effectIndex = WAVEFORM_SONY_HEAVY_CLICK_INDEX;
10171035 break ;
1018- case Effect::DOUBLE_CLICK:
1019- effectIndex = WAVEFORM_SONY_DOUBLE_CLICK_INDEX;
1020- break ;
10211036 case Effect::THUD:
10221037 effectIndex = WAVEFORM_SONY_THUD_INDEX;
10231038 break ;
10241039 case Effect::POP:
10251040 effectIndex = WAVEFORM_SONY_POP_INDEX;
10261041 break ;
1042+ #ifndef USE_COMPOUND_DOUBLE_CLICK_EFFECT
1043+ case Effect::DOUBLE_CLICK:
1044+ effectIndex = WAVEFORM_SONY_DOUBLE_CLICK_INDEX;
1045+ break ;
1046+ #endif // USE_COMPOUND_DOUBLE_CLICK_EFFECT
10271047 default :
10281048 return ndk::ScopedAStatus::fromExceptionCode (EX_UNSUPPORTED_OPERATION);
10291049 }
10301050
10311051 volLevel = intensityToVolLevel (intensity, effectIndex);
10321052 timeMs = mEffectDurations [effectIndex] + MAX_COLD_START_LATENCY_MS;
1053+
1054+ #ifdef USE_EFFECT_DURATION_POLLING
10331055 {
10341056 const std::scoped_lock<std::mutex> lock (mTotalDurationMutex );
10351057 mTotalDuration = timeMs;
10361058 }
1059+ #endif // USE_EFFECT_DURATION_POLLING
10371060
10381061 *outEffectIndex = effectIndex;
10391062 *outTimeMs = timeMs;
@@ -1078,10 +1101,13 @@ ndk::ScopedAStatus Vibrator::getCompoundDetails(Effect effect, EffectStrength st
10781101 }
10791102 effectBuilder << thisEffectIndex << " ." << thisVolLevel;
10801103 timeMs += thisTimeMs;
1104+
1105+ #ifdef USE_EFFECT_DURATION_POLLING
10811106 {
10821107 const std::scoped_lock<std::mutex> lock (mTotalDurationMutex );
10831108 mTotalDuration = timeMs;
10841109 }
1110+ #endif // USE_EFFECT_DURATION_POLLING
10851111
10861112 break ;
10871113 default :
@@ -1164,12 +1190,21 @@ ndk::ScopedAStatus Vibrator::performEffect(Effect effect, EffectStrength strengt
11641190 // fall-through
11651191 case Effect::THUD:
11661192 // fall-through
1193+ #ifdef USE_COMPOUND_DOUBLE_CLICK_EFFECT
1194+ case Effect::POP:
1195+ status = getSimpleDetails (effect, strength, &effectIndex, &timeMs, &volLevel);
1196+ break ;
1197+ case Effect::DOUBLE_CLICK:
1198+ status = getCompoundDetails (effect, strength, &timeMs, &volLevel, &effectQueue);
1199+ break ;
1200+ #else
11671201 case Effect::POP:
11681202 // fall-through
11691203 case Effect::DOUBLE_CLICK:
11701204 // fall-through
11711205 status = getSimpleDetails (effect, strength, &effectIndex, &timeMs, &volLevel);
11721206 break ;
1207+ #endif // USE_COMPOUND_DOUBLE_CLICK_EFFECT
11731208 default :
11741209 status = ndk::ScopedAStatus::fromExceptionCode (EX_UNSUPPORTED_OPERATION);
11751210 break ;
@@ -1205,6 +1240,8 @@ ndk::ScopedAStatus Vibrator::performEffect(uint32_t effectIndex, uint32_t volLev
12051240
12061241void Vibrator::waitForComplete (std::shared_ptr<IVibratorCallback>&& callback) {
12071242 ALOGD (" Vibrator::waitForComplete" );
1243+
1244+ #ifdef USE_EFFECT_DURATION_POLLING
12081245 uint32_t duration;
12091246 {
12101247 const std::scoped_lock<std::mutex> lock (mTotalDurationMutex );
@@ -1218,6 +1255,10 @@ void Vibrator::waitForComplete(std::shared_ptr<IVibratorCallback>&& callback) {
12181255 ALOGD (" Vibrator::waitForComplete: Get STOP! Set active to 0." );
12191256 }
12201257 mHwApi ->setActivate (false );
1258+ #else
1259+ mHwApi ->pollVibeState (false );
1260+ mHwApi ->setActivate (false );
1261+ #endif // USE_EFFECT_DURATION_POLLING
12211262
12221263 if (callback) {
12231264 auto ret = callback->onComplete ();
0 commit comments