[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 <[email protected]>
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 @@
         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 @@
         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<uint32_t>(e_curr.primitive)]) {
+            effectScale = mPrimitiveMinScale[static_cast<uint32_t>(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 @@
     bool mIsChirpEnabled;
     uint32_t mSupportedPrimitivesBits = 0x0;
     std::vector<CompositePrimitive> mSupportedPrimitives;
+    std::vector<float> mPrimitiveMinScale;
     bool mConfigHapticAlsaDeviceDone{false};
     bool mGPIOStatus;
     bool mIsDual{false};