aboutsummaryrefslogtreecommitdiff
path: root/quantum/encoder.c
diff options
context:
space:
mode:
authorXScorpion2 <rcalt2vt@gmail.com>2019-09-18 19:56:11 -0500
committerDrashna Jaelre <drashna@live.com>2019-09-18 17:56:11 -0700
commit46c49ae4e639509ceb6e81c460855d2eb89086b8 (patch)
tree0fd233beaba76538b8542dbf09d9ddc664196931 /quantum/encoder.c
parente5aa28455ec6c377cc9117b07dfa7d3951e6d610 (diff)
downloadqmk_firmware-46c49ae4e639509ceb6e81c460855d2eb89086b8.tar.gz
qmk_firmware-46c49ae4e639509ceb6e81c460855d2eb89086b8.zip
Updated split encoders so indexes are based on left hand encoders first (#6382)
* Updated encoder.c so that split encoders are indexed based on left hand encoders first. This ensures when swapping master sides that code logic based on encoder index doesn't change. PR Review fixes * Removed extra define
Diffstat (limited to 'quantum/encoder.c')
-rw-r--r--quantum/encoder.c42
1 files changed, 25 insertions, 17 deletions
diff --git a/quantum/encoder.c b/quantum/encoder.c
index b3b1cd9f2..36a6403b3 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -40,8 +40,10 @@ static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1,
40static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0}; 40static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0};
41 41
42#ifdef SPLIT_KEYBOARD 42#ifdef SPLIT_KEYBOARD
43// slave half encoders come over as second set of encoders 43// right half encoders come over as second set of encoders
44static int8_t encoder_value[NUMBER_OF_ENCODERS * 2] = {0}; 44static int8_t encoder_value[NUMBER_OF_ENCODERS * 2] = {0};
45// row offsets for each hand
46static uint8_t thisHand, thatHand;
45#else 47#else
46static int8_t encoder_value[NUMBER_OF_ENCODERS] = {0}; 48static int8_t encoder_value[NUMBER_OF_ENCODERS] = {0};
47#endif 49#endif
@@ -68,20 +70,33 @@ void encoder_init(void) {
68 70
69 encoder_state[i] = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1); 71 encoder_state[i] = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
70 } 72 }
73
74#ifdef SPLIT_KEYBOARD
75 thisHand = isLeftHand ? 0 : NUMBER_OF_ENCODERS;
76 thatHand = NUMBER_OF_ENCODERS - thisHand;
77#endif
78}
79
80static void encoder_update(int8_t index, uint8_t state) {
81 encoder_value[index] += encoder_LUT[state & 0xF];
82 if (encoder_value[index] >= ENCODER_RESOLUTION) {
83 encoder_update_kb(index, false);
84 }
85 if (encoder_value[index] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
86 encoder_update_kb(index, true);
87 }
88 encoder_value[index] %= ENCODER_RESOLUTION;
71} 89}
72 90
73void encoder_read(void) { 91void encoder_read(void) {
74 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) { 92 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
75 encoder_state[i] <<= 2; 93 encoder_state[i] <<= 2;
76 encoder_state[i] |= (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1); 94 encoder_state[i] |= (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
77 encoder_value[i] += encoder_LUT[encoder_state[i] & 0xF]; 95#if SPLIT_KEYBOARD
78 if (encoder_value[i] >= ENCODER_RESOLUTION) { 96 encoder_update(i + thisHand, encoder_state[i]);
79 encoder_update_kb(i, false); 97#else
80 } 98 encoder_update(i, encoder_state[i]);
81 if (encoder_value[i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise 99#endif
82 encoder_update_kb(i, true);
83 }
84 encoder_value[i] %= ENCODER_RESOLUTION;
85 } 100 }
86} 101}
87 102
@@ -90,14 +105,7 @@ void encoder_state_raw(uint8_t* slave_state) { memcpy(slave_state, encoder_state
90 105
91void encoder_update_raw(uint8_t* slave_state) { 106void encoder_update_raw(uint8_t* slave_state) {
92 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) { 107 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
93 encoder_value[NUMBER_OF_ENCODERS + i] += encoder_LUT[slave_state[i] & 0xF]; 108 encoder_update(i + thatHand, slave_state[i]);
94 if (encoder_value[NUMBER_OF_ENCODERS + i] >= ENCODER_RESOLUTION) {
95 encoder_update_kb(NUMBER_OF_ENCODERS + i, false);
96 }
97 if (encoder_value[NUMBER_OF_ENCODERS + i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
98 encoder_update_kb(NUMBER_OF_ENCODERS + i, true);
99 }
100 encoder_value[NUMBER_OF_ENCODERS + i] %= ENCODER_RESOLUTION;
101 } 109 }
102} 110}
103#endif 111#endif