Add scale factor fields to HapticGenerator AIDL
Add support for haptic scale factors introduced to the HapticScale
parcelable defined at HapticGenerator.aidl.
Make sure the fields are forwarded to the os::HapticScale representation
to be used by ExternalVibratorUtils scaling function.
Bug: 356406324
Bug: 356406686
Flag: android.os.vibrator.haptics_scale_v2_enabled
Test: libvibrator_test
Change-Id: I310527f6a45f52e9dbe44090fc6102f3a69ebe23
diff --git a/services/audioflinger/Effects.cpp b/services/audioflinger/Effects.cpp
index ec8d135..6273570 100644
--- a/services/audioflinger/Effects.cpp
+++ b/services/audioflinger/Effects.cpp
@@ -1587,18 +1587,25 @@
return INVALID_OPERATION;
}
+ // Scale param fields
+ int32_t intensityParam = static_cast<int32_t>(HG_PARAM_HAPTIC_INTENSITY);
+ int32_t scaleLevel = static_cast<int32_t>(hapticScale.getLevel());
+ float scaleFactor = hapticScale.getScaleFactor();
+ float adaptiveScaleFactor = hapticScale.getAdaptiveScaleFactor();
+
size_t psize = sizeof(int32_t); // HG_PARAM_HAPTIC_INTENSITY
- size_t vsize = sizeof(int32_t) + sizeof(os::HapticScale); // id + hapticScale
+ size_t vsize = 2 * sizeof(int32_t) + 2 * sizeof(float); // id + scale fields
std::vector<uint8_t> request(sizeof(effect_param_t) + psize + vsize);
effect_param_t *effectParam = (effect_param_t*) request.data();
effectParam->psize = psize;
effectParam->vsize = vsize;
- int32_t intensityParam = static_cast<int32_t>(HG_PARAM_HAPTIC_INTENSITY);
EffectParamWriter writer(*effectParam);
writer.writeToParameter(&intensityParam);
writer.writeToValue(&id);
- writer.writeToValue(&hapticScale);
+ writer.writeToValue(&scaleLevel);
+ writer.writeToValue(&scaleFactor);
+ writer.writeToValue(&adaptiveScaleFactor);
writer.finishValueWrite();
std::vector<uint8_t> response;