aboutsummaryrefslogtreecommitdiff
path: root/quantum/encoder.c
diff options
context:
space:
mode:
authorskullY <skullydazed@gmail.com>2019-08-30 11:19:03 -0700
committerskullydazed <skullydazed@users.noreply.github.com>2019-08-30 15:01:52 -0700
commitb624f32f944acdc59dcb130674c09090c5c404cb (patch)
treebc13adbba137d122d9a2c2fb2fafcbb08ac10e25 /quantum/encoder.c
parent61af76a10d00aba185b8338604171de490a13e3b (diff)
downloadqmk_firmware-b624f32f944acdc59dcb130674c09090c5c404cb.tar.gz
qmk_firmware-b624f32f944acdc59dcb130674c09090c5c404cb.zip
clang-format changes
Diffstat (limited to 'quantum/encoder.c')
-rw-r--r--quantum/encoder.c88
1 files changed, 40 insertions, 48 deletions
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 10d8cf7da..b3b1cd9f2 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -17,27 +17,25 @@
17 17
18#include "encoder.h" 18#include "encoder.h"
19#ifdef SPLIT_KEYBOARD 19#ifdef SPLIT_KEYBOARD
20 #include "split_util.h" 20# include "split_util.h"
21#endif 21#endif
22 22
23// for memcpy 23// for memcpy
24#include <string.h> 24#include <string.h>
25 25
26
27#ifndef ENCODER_RESOLUTION 26#ifndef ENCODER_RESOLUTION
28 #define ENCODER_RESOLUTION 4 27# define ENCODER_RESOLUTION 4
29#endif 28#endif
30 29
31#if !defined(ENCODERS_PAD_A) || !defined(ENCODERS_PAD_B) 30#if !defined(ENCODERS_PAD_A) || !defined(ENCODERS_PAD_B)
32 #error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B" 31# error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B"
33#endif 32#endif
34 33
35 34#define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a) / sizeof(pin_t))
36#define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a)/sizeof(pin_t))
37static pin_t encoders_pad_a[] = ENCODERS_PAD_A; 35static pin_t encoders_pad_a[] = ENCODERS_PAD_A;
38static pin_t encoders_pad_b[] = ENCODERS_PAD_B; 36static pin_t encoders_pad_b[] = ENCODERS_PAD_B;
39 37
40static int8_t encoder_LUT[] = { 0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0 }; 38static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
41 39
42static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0}; 40static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0};
43 41
@@ -48,64 +46,58 @@ static int8_t encoder_value[NUMBER_OF_ENCODERS * 2] = {0};
48static int8_t encoder_value[NUMBER_OF_ENCODERS] = {0}; 46static int8_t encoder_value[NUMBER_OF_ENCODERS] = {0};
49#endif 47#endif
50 48
51__attribute__ ((weak)) 49__attribute__((weak)) void encoder_update_user(int8_t index, bool clockwise) {}
52void encoder_update_user(int8_t index, bool clockwise) { }
53 50
54__attribute__ ((weak)) 51__attribute__((weak)) void encoder_update_kb(int8_t index, bool clockwise) { encoder_update_user(index, clockwise); }
55void encoder_update_kb(int8_t index, bool clockwise) {
56 encoder_update_user(index, clockwise);
57}
58 52
59void encoder_init(void) { 53void encoder_init(void) {
60#if defined(SPLIT_KEYBOARD) && defined(ENCODERS_PAD_A_RIGHT) && defined(ENCODERS_PAD_B_RIGHT) 54#if defined(SPLIT_KEYBOARD) && defined(ENCODERS_PAD_A_RIGHT) && defined(ENCODERS_PAD_B_RIGHT)
61 if (!isLeftHand) { 55 if (!isLeftHand) {
62 const pin_t encoders_pad_a_right[] = ENCODERS_PAD_A_RIGHT; 56 const pin_t encoders_pad_a_right[] = ENCODERS_PAD_A_RIGHT;
63 const pin_t encoders_pad_b_right[] = ENCODERS_PAD_B_RIGHT; 57 const pin_t encoders_pad_b_right[] = ENCODERS_PAD_B_RIGHT;
64 for (uint8_t i = 0; i < NUMBER_OF_ENCODERS; i++) { 58 for (uint8_t i = 0; i < NUMBER_OF_ENCODERS; i++) {
65 encoders_pad_a[i] = encoders_pad_a_right[i]; 59 encoders_pad_a[i] = encoders_pad_a_right[i];
66 encoders_pad_b[i] = encoders_pad_b_right[i]; 60 encoders_pad_b[i] = encoders_pad_b_right[i];
61 }
67 } 62 }
68 }
69#endif 63#endif
70 64
71 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) { 65 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
72 setPinInputHigh(encoders_pad_a[i]); 66 setPinInputHigh(encoders_pad_a[i]);
73 setPinInputHigh(encoders_pad_b[i]); 67 setPinInputHigh(encoders_pad_b[i]);
74 68
75 encoder_state[i] = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1); 69 encoder_state[i] = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
76 } 70 }
77} 71}
78 72
79void encoder_read(void) { 73void encoder_read(void) {
80 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) { 74 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
81 encoder_state[i] <<= 2; 75 encoder_state[i] <<= 2;
82 encoder_state[i] |= (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1); 76 encoder_state[i] |= (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1);
83 encoder_value[i] += encoder_LUT[encoder_state[i] & 0xF]; 77 encoder_value[i] += encoder_LUT[encoder_state[i] & 0xF];
84 if (encoder_value[i] >= ENCODER_RESOLUTION) { 78 if (encoder_value[i] >= ENCODER_RESOLUTION) {
85 encoder_update_kb(i, false); 79 encoder_update_kb(i, false);
80 }
81 if (encoder_value[i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
82 encoder_update_kb(i, true);
83 }
84 encoder_value[i] %= ENCODER_RESOLUTION;
86 } 85 }
87 if (encoder_value[i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
88 encoder_update_kb(i, true);
89 }
90 encoder_value[i] %= ENCODER_RESOLUTION;
91 }
92} 86}
93 87
94#ifdef SPLIT_KEYBOARD 88#ifdef SPLIT_KEYBOARD
95void encoder_state_raw(uint8_t* slave_state) { 89void encoder_state_raw(uint8_t* slave_state) { memcpy(slave_state, encoder_state, sizeof(encoder_state)); }
96 memcpy(slave_state, encoder_state, sizeof(encoder_state));
97}
98 90
99void encoder_update_raw(uint8_t* slave_state) { 91void encoder_update_raw(uint8_t* slave_state) {
100 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) { 92 for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
101 encoder_value[NUMBER_OF_ENCODERS + i] += encoder_LUT[slave_state[i] & 0xF]; 93 encoder_value[NUMBER_OF_ENCODERS + i] += encoder_LUT[slave_state[i] & 0xF];
102 if (encoder_value[NUMBER_OF_ENCODERS + i] >= ENCODER_RESOLUTION) { 94 if (encoder_value[NUMBER_OF_ENCODERS + i] >= ENCODER_RESOLUTION) {
103 encoder_update_kb(NUMBER_OF_ENCODERS + i, false); 95 encoder_update_kb(NUMBER_OF_ENCODERS + i, false);
104 } 96 }
105 if (encoder_value[NUMBER_OF_ENCODERS + i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise 97 if (encoder_value[NUMBER_OF_ENCODERS + i] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
106 encoder_update_kb(NUMBER_OF_ENCODERS + i, true); 98 encoder_update_kb(NUMBER_OF_ENCODERS + i, true);
99 }
100 encoder_value[NUMBER_OF_ENCODERS + i] %= ENCODER_RESOLUTION;
107 } 101 }
108 encoder_value[NUMBER_OF_ENCODERS + i] %= ENCODER_RESOLUTION;
109 }
110} 102}
111#endif 103#endif