vibrator: Switch from 0-255 to 0.0f-1.0f range for amplitude

* This was missed when converting to AIDL
* Fixes strength control for effects

Change-Id: Iedcdbb455b67b9466a76e53ca9273cbcdcede059
tirimbino
SamarV-121 2 years ago committed by Ruchit
parent 6a491770d9
commit eb62534cdd
  1. 24
      aidl/vibrator/Vibrator.cpp
  2. 8
      aidl/vibrator/Vibrator.h

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2021 The LineageOS Project * Copyright (C) 2021-2023 The LineageOS Project
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@ -101,7 +101,7 @@ ndk::ScopedAStatus Vibrator::on(int32_t timeoutMs, const std::shared_ptr<IVibrat
ndk::ScopedAStatus Vibrator::perform(Effect effect, EffectStrength strength, const std::shared_ptr<IVibratorCallback>& callback, int32_t* _aidl_return) { ndk::ScopedAStatus Vibrator::perform(Effect effect, EffectStrength strength, const std::shared_ptr<IVibratorCallback>& callback, int32_t* _aidl_return) {
ndk::ScopedAStatus status; ndk::ScopedAStatus status;
uint32_t amplitude = strengthToAmplitude(strength, &status); float amplitude = strengthToAmplitude(strength, &status);
uint32_t ms = 1000; uint32_t ms = 1000;
if (!status.isOk()) if (!status.isOk())
@ -152,16 +152,14 @@ ndk::ScopedAStatus Vibrator::getSupportedEffects(std::vector<Effect>* _aidl_retu
ndk::ScopedAStatus Vibrator::setAmplitude(float amplitude) { ndk::ScopedAStatus Vibrator::setAmplitude(float amplitude) {
uint32_t intensity; uint32_t intensity;
if (amplitude == 0) { if (amplitude <= 0.0f || amplitude > 1.0f) {
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT); return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT));
} }
LOG(DEBUG) << "Setting amplitude: " << (uint32_t)amplitude; LOG(DEBUG) << "Setting amplitude: " << amplitude;
intensity = amplitude * INTENSITY_MAX;
intensity = std::lround((amplitude - 1) * INTENSITY_MAX / 254.0);
if (intensity > INTENSITY_MAX) {
intensity = INTENSITY_MAX;
}
LOG(DEBUG) << "Setting intensity: " << intensity; LOG(DEBUG) << "Setting intensity: " << intensity;
if (mHasTimedOutIntensity) { if (mHasTimedOutIntensity) {
@ -260,16 +258,16 @@ ndk::ScopedAStatus Vibrator::activate(uint32_t timeoutMs) {
return writeNode(VIBRATOR_TIMEOUT_PATH, timeoutMs); return writeNode(VIBRATOR_TIMEOUT_PATH, timeoutMs);
} }
uint8_t Vibrator::strengthToAmplitude(EffectStrength strength, ndk::ScopedAStatus* status) { float Vibrator::strengthToAmplitude(EffectStrength strength, ndk::ScopedAStatus* status) {
*status = ndk::ScopedAStatus::ok(); *status = ndk::ScopedAStatus::ok();
switch (strength) { switch (strength) {
case EffectStrength::LIGHT: case EffectStrength::LIGHT:
return 64; return AMPLITUDE_LIGHT;
case EffectStrength::MEDIUM: case EffectStrength::MEDIUM:
return 128; return AMPLITUDE_MEDIUM;
case EffectStrength::STRONG: case EffectStrength::STRONG:
return 255; return AMPLITUDE_STRONG;
} }
*status = ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); *status = ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2021 The LineageOS Project * Copyright (C) 2021-2023 The LineageOS Project
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@ -12,6 +12,10 @@
#define INTENSITY_MAX 10000 #define INTENSITY_MAX 10000
#define INTENSITY_DEFAULT INTENSITY_MAX #define INTENSITY_DEFAULT INTENSITY_MAX
#define AMPLITUDE_LIGHT 0.25
#define AMPLITUDE_MEDIUM 0.5
#define AMPLITUDE_STRONG 1
#define VIBRATOR_TIMEOUT_PATH "/sys/class/timed_output/vibrator/enable" #define VIBRATOR_TIMEOUT_PATH "/sys/class/timed_output/vibrator/enable"
#define VIBRATOR_INTENSITY_PATH "/sys/class/timed_output/vibrator/intensity" #define VIBRATOR_INTENSITY_PATH "/sys/class/timed_output/vibrator/intensity"
#define VIBRATOR_CP_TRIGGER_PATH "/sys/class/timed_output/vibrator/cp_trigger_index" #define VIBRATOR_CP_TRIGGER_PATH "/sys/class/timed_output/vibrator/cp_trigger_index"
@ -60,7 +64,7 @@ public:
private: private:
ndk::ScopedAStatus activate(uint32_t ms); ndk::ScopedAStatus activate(uint32_t ms);
static uint32_t effectToMs(Effect effect, ndk::ScopedAStatus* status); static uint32_t effectToMs(Effect effect, ndk::ScopedAStatus* status);
static uint8_t strengthToAmplitude(EffectStrength strength, ndk::ScopedAStatus* status); static float strengthToAmplitude(EffectStrength strength, ndk::ScopedAStatus* status);
bool mEnabled{false}; bool mEnabled{false};
bool mExternalControl{false}; bool mExternalControl{false};

Loading…
Cancel
Save