diff options
Diffstat (limited to 'quantum/encoder.c')
| -rw-r--r-- | quantum/encoder.c | 42 |
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, | |||
| 40 | static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0}; | 40 | static 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 |
| 44 | static int8_t encoder_value[NUMBER_OF_ENCODERS * 2] = {0}; | 44 | static int8_t encoder_value[NUMBER_OF_ENCODERS * 2] = {0}; |
| 45 | // row offsets for each hand | ||
| 46 | static uint8_t thisHand, thatHand; | ||
| 45 | #else | 47 | #else |
| 46 | static int8_t encoder_value[NUMBER_OF_ENCODERS] = {0}; | 48 | static 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 | |||
| 80 | static 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 | ||
| 73 | void encoder_read(void) { | 91 | void 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 | ||
| 91 | void encoder_update_raw(uint8_t* slave_state) { | 106 | void 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 |
