Pong: vibrator: Make haptics a bit tighter

Signed-off-by: Abhay Singh Gill <abhaygill017@gmail.com>
This commit is contained in:
Abhay Singh Gill
2025-03-28 23:08:01 +05:30
committed by hiroshi
parent db352430bf
commit 76148020cb
2 changed files with 38 additions and 44 deletions

View File

@@ -416,25 +416,20 @@ int LedVibratorDevice::setAmplitude(float amplitude) {
int gain = 0;
mLevel = amplitude * 3;
if (mTimeoutMs < 10) {
gain = 25 + 4 * mTimeoutMs; // Small but noticeable tap
} else if (mTimeoutMs < 30) {
gain = 65 + 2.5 * (mTimeoutMs - 10); // Sharper click feel
} else if (mTimeoutMs < 60) {
gain = 100 + 1.5 * (mTimeoutMs - 30); // Heavy but controlled
} else {
gain = 128; // Max out for longest presses
}
if (mTimeoutMs < 20) {
gain = 4 + 4.6*mTimeoutMs;
ret |= write_value(LED_DEVICE "/index", "1");
ret |= write_value(LED_DEVICE "/loop", "0 0");
ret |= write_value(LED_DEVICE "/vmax", "9000");
ret |= write_value(LED_DEVICE "/gain", gain);
ret |= write_value(LED_DEVICE "/brightness", "1");
} else if (mTimeoutMs < 40) {
gain = 4 + 3.1*mTimeoutMs;
ret |= write_value(LED_DEVICE "/index", "1");
ret |= write_value(LED_DEVICE "/loop", "0 0");
ret |= write_value(LED_DEVICE "/vmax", "9000");
ret |= write_value(LED_DEVICE "/gain", gain);
ret |= write_value(LED_DEVICE "/brightness", "1");
} else if (mTimeoutMs < 101) {
gain = 4 + 2.5*mTimeoutMs;
if (gain > 153)
gain = 153; // (Should never exceed this)
if (gain > 128) gain = 128;
if (mTimeoutMs < 101) {
ret |= write_value(LED_DEVICE "/index", "1");
ret |= write_value(LED_DEVICE "/loop", "0 0");
ret |= write_value(LED_DEVICE "/vmax", "9000");
@@ -442,9 +437,9 @@ int LedVibratorDevice::setAmplitude(float amplitude) {
ret |= write_value(LED_DEVICE "/brightness", "1");
} else {
ret |= write_value(LED_DEVICE "/index", "4");
ret |= write_value(LED_DEVICE "/vmax", "8400");
ret |= write_value(LED_DEVICE "/vmax", "9000");
ret |= write_value(LED_DEVICE "/gain", "0x80");
ret |= write_value(LED_DEVICE "/brightness", "1");
ret |= write_value(LED_DEVICE "/activate", "1");
}
return ret;
@@ -542,63 +537,63 @@ ndk::ScopedAStatus Vibrator::perform(Effect effect, EffectStrength es, const std
ledVib.write_value(LED_DEVICE "/duration", "10");
ledVib.write_value(LED_DEVICE "/index", "1");
ledVib.write_value(LED_DEVICE "/loop", "0 0");
ledVib.write_value(LED_DEVICE "/vmax", "9000");
ledVib.write_value(LED_DEVICE "/gain", 153);
ledVib.write_value(LED_DEVICE "/vmax", "8500");
ledVib.write_value(LED_DEVICE "/gain", "128");
ledVib.write_value(LED_DEVICE "/brightness", "1");
break;
case Effect::DOUBLE_CLICK:
ledVib.write_value(LED_DEVICE "/duration", "13");
ledVib.write_value(LED_DEVICE "/duration", "10");
ledVib.write_value(LED_DEVICE "/index", "1");
ledVib.write_value(LED_DEVICE "/loop", "0 0");
ledVib.write_value(LED_DEVICE "/vmax", "9000");
ledVib.write_value(LED_DEVICE "/gain", 153);
ledVib.write_value(LED_DEVICE "/vmax", "8500");
ledVib.write_value(LED_DEVICE "/gain", "128");
ledVib.write_value(LED_DEVICE "/brightness", "1");
usleep(100 * 1000);
ledVib.write_value(LED_DEVICE "/duration", "13");
ledVib.write_value(LED_DEVICE "/duration", "10");
ledVib.write_value(LED_DEVICE "/index", "1");
ledVib.write_value(LED_DEVICE "/loop", "0 0");
ledVib.write_value(LED_DEVICE "/vmax", "9000");
ledVib.write_value(LED_DEVICE "/gain", 153);
ledVib.write_value(LED_DEVICE "/vmax", "8500");
ledVib.write_value(LED_DEVICE "/gain", "128");
ledVib.write_value(LED_DEVICE "/brightness", "1");
break;
case Effect::HEAVY_CLICK:
ledVib.write_value(LED_DEVICE "/duration", "10");
ledVib.write_value(LED_DEVICE "/duration", "16");
ledVib.write_value(LED_DEVICE "/index", "1");
ledVib.write_value(LED_DEVICE "/loop", "0 0");
ledVib.write_value(LED_DEVICE "/vmax", "9000");
ledVib.write_value(LED_DEVICE "/gain", 153);
ledVib.write_value(LED_DEVICE "/gain", "128");
ledVib.write_value(LED_DEVICE "/brightness", "1");
break;
case Effect::TICK:
ledVib.write_value(LED_DEVICE "/duration", "30");
ledVib.write_value(LED_DEVICE "/duration", "6");
ledVib.write_value(LED_DEVICE "/index", "1");
ledVib.write_value(LED_DEVICE "/loop", "0 0");
ledVib.write_value(LED_DEVICE "/vmax", "9000");
ledVib.write_value(LED_DEVICE "/gain", 153);
ledVib.write_value(LED_DEVICE "/vmax", "8000");
ledVib.write_value(LED_DEVICE "/gain", "100"); // Softer feel
ledVib.write_value(LED_DEVICE "/brightness", "1");
break;
case Effect::THUD:
ledVib.write_value(LED_DEVICE "/duration", "40");
ledVib.write_value(LED_DEVICE "/duration", "14");
ledVib.write_value(LED_DEVICE "/index", "4");
ledVib.write_value(LED_DEVICE "/loop", "0 0");
ledVib.write_value(LED_DEVICE "/vmax", "9000");
ledVib.write_value(LED_DEVICE "/gain", "143");
ledVib.write_value(LED_DEVICE "/gain", "110"); // Slightly lower than heavy click
ledVib.write_value(LED_DEVICE "/brightness", "1");
break;
case Effect::POP:
ledVib.write_value(LED_DEVICE "/duration", "13");
ledVib.write_value(LED_DEVICE "/duration", "9");
ledVib.write_value(LED_DEVICE "/index", "1");
ledVib.write_value(LED_DEVICE "/loop", "0 0");
ledVib.write_value(LED_DEVICE "/vmax", "9000");
ledVib.write_value(LED_DEVICE "/gain", 153);
ledVib.write_value(LED_DEVICE "/vmax", "8700");
ledVib.write_value(LED_DEVICE "/gain", "120"); // Between CLICK and HEAVY_CLICK
ledVib.write_value(LED_DEVICE "/brightness", "1");
break;
case Effect::TEXTURE_TICK:
ledVib.write_value(LED_DEVICE "/duration", "10");
ledVib.write_value(LED_DEVICE "/duration", "5");
ledVib.write_value(LED_DEVICE "/index", "1");
ledVib.write_value(LED_DEVICE "/loop", "0 0");
ledVib.write_value(LED_DEVICE "/vmax", "9000");
ledVib.write_value(LED_DEVICE "/gain", "0x80");
ledVib.write_value(LED_DEVICE "/vmax", "7800");
ledVib.write_value(LED_DEVICE "/gain", "90"); // Softest response
ledVib.write_value(LED_DEVICE "/brightness", "1");
break;
default:

View File

@@ -4,11 +4,10 @@ service vendor.qti.vibrator /vendor/bin/hw/vendor.qti.hardware.vibrator.service.
group system input
on late-init
chown system system /sys/class/leds/aw_vibrator/brightness
chown system system /sys/class/leds/aw_vibrator/activate
chown system system /sys/class/leds/aw_vibrator/duration
chown system system /sys/class/leds/aw_vibrator/state
chown system system /sys/class/leds/aw_vibrator/brightness
chown system system /sys/class/leds/aw_vibrator/gain
chown system system /sys/class/leds/aw_vibrator/loop
chown system system /sys/class/leds/aw_vibrator/vmax
chown system system /sys/class/leds/aw_vibrator/index
chown system system /sys/class/leds/aw_vibrator/index