Increased number of encoder dial sensitivity setting levels (#1275)

* Encoder dial sensitivity 0-4

* Workaround for worn encoders & more sensitivity levels

* Workaround for worn encoders & more sensitivity levels

* Encoder sensitivity levels 0-4

* Encoder sensitivity levels 0-4

* Fix comment

* Clang

* Clang

* Change default encoder sensitivity in pmem

* Set default encoder sensitivity

* Set default encoder sensitivity

* Revert widget type for encoder sensitivity

* Revert widget type for encoder dial sensitivity

* Revert worn encoder workaround (didn't work)

* 5 levels of encoder dial sensitivity

* 5 levels of encoder dial sensitivity
This commit is contained in:
Mark Thompson 2023-07-16 17:05:27 -05:00 committed by GitHub
parent 25923e82a4
commit 2498861003
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 69 deletions

View File

@ -480,10 +480,12 @@ class SetEncoderDialView : public View {
OptionsField field_encoder_dial_sensitivity{ OptionsField field_encoder_dial_sensitivity{
{20 * 8, 3 * 16}, {20 * 8, 3 * 16},
6, 7,
{{"LOW", encoder_dial_sensitivity::DIAL_SENSITIVITY_LOW}, {{"LOWEST", encoder_dial_sensitivity::DIAL_SENSITIVITY_LOWEST},
{"NORMAL", encoder_dial_sensitivity::DIAL_SENSITIVITY_MEDIUM}, {"LOW", encoder_dial_sensitivity::DIAL_SENSITIVITY_LOW},
{"HIGH", encoder_dial_sensitivity::DIAL_SENSITIVITY_HIGH}}}; {"NORMAL", encoder_dial_sensitivity::DIAL_SENSITIVITY_NORMAL},
{"HIGH", encoder_dial_sensitivity::DIAL_SENSITIVITY_HIGH},
{"HIGHEST", encoder_dial_sensitivity::DIAL_SENSITIVITY_HIGHEST}}};
Button button_save{ Button button_save{
{2 * 8, 16 * 16, 12 * 8, 32}, {2 * 8, 16 * 16, 12 * 8, 32},

View File

@ -32,66 +32,24 @@
// 12 degrees of rotation. // 12 degrees of rotation.
// //
// For each encoder "pulse" there are 4 state transitions, and we can choose // For each encoder "pulse" there are 4 state transitions, and we can choose
// between looking at all of them (high sensitivity), half of them (medium/default), // how many transitions are needed before movement is registered
// or one quarter of them (low sensitivity). static const int8_t transition_map[16] = {
static const int8_t transition_map[][16] = { 0, // 0000: noop
// Normal (Medium) Sensitivity -- default -1, // 0001: ccw start
{ 1, // 0010: cw start
0, // 0000: noop 0, // 0011: rate
0, // 0001: ccw start 1, // 0100: cw end
0, // 0010: cw start 0, // 0101: noop
0, // 0011: rate 0, // 0110: rate
1, // 0100: cw end -1, // 0111: ccw end
0, // 0101: noop -1, // 1000: ccw end
0, // 0110: rate 0, // 1001: rate
-1, // 0111: ccw end 0, // 1010: noop
-1, // 1000: ccw end 1, // 1011: cw end
0, // 1001: rate 0, // 1100: rate
0, // 1010: noop 1, // 1101: cw start
1, // 1011: cw end -1, // 1110: ccw start
0, // 1100: rate 0, // 1111: noop
0, // 1101: cw start
0, // 1110: ccw start
0, // 1111: noop
},
// Low Sensitivity
{
0, // 0000: noop
0, // 0001: ccw start
0, // 0010: cw start
0, // 0011: rate
1, // 0100: cw end
0, // 0101: noop
0, // 0110: rate
0, // 0111: ccw end
-1, // 1000: ccw end
0, // 1001: rate
0, // 1010: noop
0, // 1011: cw end
0, // 1100: rate
0, // 1101: cw start
0, // 1110: ccw start
0, // 1111: noop
},
// High Sensitivity
{
0, // 0000: noop
-1, // 0001: ccw start
1, // 0010: cw start
0, // 0011: rate
1, // 0100: cw end
0, // 0101: noop
0, // 0110: rate
-1, // 0111: ccw end
-1, // 1000: ccw end
0, // 1001: rate
0, // 1010: noop
1, // 1011: cw end
0, // 1100: rate
1, // 1101: cw start
-1, // 1110: ccw start
0, // 1111: noop
},
}; };
int_fast8_t Encoder::update( int_fast8_t Encoder::update(
@ -102,6 +60,13 @@ int_fast8_t Encoder::update(
state <<= 1; state <<= 1;
state |= phase_1; state |= phase_1;
// dial sensitivity setting is stored in pmem int_fast8_t retval = transition_map[state & 0xf];
return transition_map[portapack::persistent_memory::config_encoder_dial_sensitivity()][state & 0xf];
transition_count += retval;
if (abs(transition_count) > portapack::persistent_memory::config_encoder_dial_sensitivity())
transition_count = 0;
else
retval = 0;
return retval;
} }

View File

@ -32,6 +32,7 @@ class Encoder {
private: private:
uint_fast8_t state{0}; uint_fast8_t state{0};
int_fast8_t transition_count{0};
}; };
#endif /*__ENCODER_H__*/ #endif /*__ENCODER_H__*/

View File

@ -363,6 +363,7 @@ void defaults() {
set_config_backlight_timer(backlight_config_t{}); set_config_backlight_timer(backlight_config_t{});
set_config_splash(true); set_config_splash(true);
set_encoder_dial_sensitivity(DIAL_SENSITIVITY_NORMAL);
// Default values for recon app. // Default values for recon app.
set_recon_autosave_freqs(false); set_recon_autosave_freqs(false);

View File

@ -107,9 +107,11 @@ struct backlight_config_t {
}; };
enum encoder_dial_sensitivity { enum encoder_dial_sensitivity {
DIAL_SENSITIVITY_MEDIUM = 0, DIAL_SENSITIVITY_HIGHEST = 0,
DIAL_SENSITIVITY_LOW = 1, DIAL_SENSITIVITY_HIGH = 1,
DIAL_SENSITIVITY_HIGH = 2, DIAL_SENSITIVITY_NORMAL = 2,
DIAL_SENSITIVITY_LOW = 3,
DIAL_SENSITIVITY_LOWEST = 4,
NUM_DIAL_SENSITIVITY NUM_DIAL_SENSITIVITY
}; };