From 6346fec3afc235316ecd9a461aa9fa78a39055e3 Mon Sep 17 00:00:00 2001 From: Nathan Kulczak Date: Wed, 14 Dec 2022 04:26:16 +0000 Subject: [PATCH] [DO NOT MERGE] vibrator/cs40l26: Adding minimum scale for composition primitives Adding minimum scale for composition primitives to make 0 scale primitives perform similarly to C10. Bug: 260611234 Test: Flashed to device and played compositions with idlcli Change-Id: Iaf872011b79de9da46de0de3ca770b794f67cd88 Signed-off-by: Nathan Kulczak --- vibrator/cs40l26/Vibrator.cpp | 11 +++++++++-- vibrator/cs40l26/Vibrator.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/vibrator/cs40l26/Vibrator.cpp b/vibrator/cs40l26/Vibrator.cpp index f943323..0716517 100644 --- a/vibrator/cs40l26/Vibrator.cpp +++ b/vibrator/cs40l26/Vibrator.cpp @@ -529,6 +529,8 @@ Vibrator::Vibrator(std::unique_ptr hwApiDefault, std::unique_ptr h mSupportedPrimitives = defaultSupportedPrimitives; } + mPrimitiveMinScale = {0.0f, 0.01f, 0.11f, 0.23f, 0.0f, 0.25f, 0.02f, 0.03f, 0.16f}; + // ====== Get GPIO status and init it ================ mGPIOStatus = mHwGPIO->getGPIO(); if (!mGPIOStatus || !mHwGPIO->initGPIO()) { @@ -758,17 +760,22 @@ ndk::ScopedAStatus Vibrator::compose(const std::vector &composi auto &e_curr = composite[i_curr]; uint32_t effectIndex = 0; uint32_t effectVolLevel = 0; - if (e_curr.scale < 0.0f || e_curr.scale > 1.0f) { + float effectScale = e_curr.scale; + if (effectScale < 0.0f || effectScale > 1.0f) { return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); } + if(effectScale < mPrimitiveMinScale[static_cast(e_curr.primitive)]) { + effectScale = mPrimitiveMinScale[static_cast(e_curr.primitive)]; + } + if (e_curr.primitive != CompositePrimitive::NOOP) { ndk::ScopedAStatus status; status = getPrimitiveDetails(e_curr.primitive, &effectIndex); if (!status.isOk()) { return status; } - effectVolLevel = intensityToVolLevel(e_curr.scale, effectIndex); + effectVolLevel = intensityToVolLevel(effectScale, effectIndex); totalDuration += mEffectDurations[effectIndex]; } diff --git a/vibrator/cs40l26/Vibrator.h b/vibrator/cs40l26/Vibrator.h index 1f7ed70..6a29343 100644 --- a/vibrator/cs40l26/Vibrator.h +++ b/vibrator/cs40l26/Vibrator.h @@ -231,6 +231,7 @@ class Vibrator : public BnVibrator { bool mIsChirpEnabled; uint32_t mSupportedPrimitivesBits = 0x0; std::vector mSupportedPrimitives; + std::vector mPrimitiveMinScale; bool mConfigHapticAlsaDeviceDone{false}; bool mGPIOStatus; bool mIsDual{false};