Merge pull request #4162 from leptun/fix_lcd_encoder_diff
Fix `lcd_encoder_diff` getting out of sync with the knob hard steps
This commit is contained in:
commit
ae75d9bb0e
|
|
@ -4,6 +4,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
|
#include <util/atomic.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include "Timer.h"
|
#include "Timer.h"
|
||||||
|
|
||||||
|
|
@ -684,13 +685,20 @@ void lcd_knob_update() {
|
||||||
if (lcd_backlight_wake_trigger) {
|
if (lcd_backlight_wake_trigger) {
|
||||||
lcd_backlight_wake_trigger = false;
|
lcd_backlight_wake_trigger = false;
|
||||||
backlight_wake();
|
backlight_wake();
|
||||||
if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) {
|
bool did_rotate = false;
|
||||||
lcd_encoder += lcd_encoder_diff / ENCODER_PULSES_PER_STEP;
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
|
||||||
lcd_encoder_diff = 0;
|
if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) {
|
||||||
Sound_MakeSound(e_SOUND_TYPE_EncoderMove);
|
lcd_encoder += lcd_encoder_diff / ENCODER_PULSES_PER_STEP;
|
||||||
} else {
|
lcd_encoder_diff %= ENCODER_PULSES_PER_STEP;
|
||||||
Sound_MakeSound(e_SOUND_TYPE_ButtonEcho);
|
did_rotate = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Get lcd_encoder_diff in sync with the encoder hard steps.
|
||||||
|
// We assume that a click happens only when the knob is rotated into a stable position
|
||||||
|
lcd_encoder_diff = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Sound_MakeSound(did_rotate ? e_SOUND_TYPE_EncoderMove : e_SOUND_TYPE_ButtonEcho);
|
||||||
|
|
||||||
if (lcd_draw_update == 0) {
|
if (lcd_draw_update == 0) {
|
||||||
// Update LCD rendering at minimum
|
// Update LCD rendering at minimum
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue