aboutsummaryrefslogtreecommitdiff
path: root/keyboards
diff options
context:
space:
mode:
authorErez Zukerman <bulk@ezuk.org>2017-10-31 11:33:09 -0700
committerGitHub <noreply@github.com>2017-10-31 11:33:09 -0700
commitbc98b0d9eb5eb1a4df140ab6e2158904e5e100e5 (patch)
tree1b2386448402419c79dfa8b447598f7cd2c9141d /keyboards
parent38261920a9c082ceede0d9d31e3a94b9f520e7c8 (diff)
parent0bb457e573e85b3b8f364efdff1eb0c5e4717df9 (diff)
downloadqmk_firmware-bc98b0d9eb5eb1a4df140ab6e2158904e5e100e5.tar.gz
qmk_firmware-bc98b0d9eb5eb1a4df140ab6e2158904e5e100e5.zip
Merge pull request #1915 from dondelelcaro/ergodox_ez_left_leds
Ergodox ez left leds support
Diffstat (limited to 'keyboards')
-rw-r--r--keyboards/ergodox_ez/ergodox_ez.c73
-rw-r--r--keyboards/ergodox_ez/ergodox_ez.h24
-rw-r--r--keyboards/ergodox_ez/matrix.c3
-rw-r--r--keyboards/ergodox_ez/rules.mk4
4 files changed, 104 insertions, 0 deletions
diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c
index 3609f6f81..8ada551ae 100644
--- a/keyboards/ergodox_ez/ergodox_ez.c
+++ b/keyboards/ergodox_ez/ergodox_ez.c
@@ -61,11 +61,46 @@ void ergodox_blink_all_leds(void)
61 _delay_ms(50); 61 _delay_ms(50);
62 ergodox_right_led_3_on(); 62 ergodox_right_led_3_on();
63 _delay_ms(50); 63 _delay_ms(50);
64#ifdef LEFT_LEDS
65 ergodox_left_led_1_on();
66 _delay_ms(50);
67 if (!mcp23018_status) {
68 mcp23018_status = ergodox_left_leds_update();
69 }
70 ergodox_left_led_2_on();
71 _delay_ms(50);
72 if (!mcp23018_status) {
73 mcp23018_status = ergodox_left_leds_update();
74 }
75 ergodox_left_led_3_on();
76 _delay_ms(50);
77 if (!mcp23018_status) {
78 mcp23018_status = ergodox_left_leds_update();
79 }
80#endif
64 ergodox_right_led_1_off(); 81 ergodox_right_led_1_off();
65 _delay_ms(50); 82 _delay_ms(50);
66 ergodox_right_led_2_off(); 83 ergodox_right_led_2_off();
67 _delay_ms(50); 84 _delay_ms(50);
68 ergodox_right_led_3_off(); 85 ergodox_right_led_3_off();
86#ifdef LEFT_LEDS
87 _delay_ms(50);
88 ergodox_left_led_1_off();
89 if (!mcp23018_status) {
90 mcp23018_status = ergodox_left_leds_update();
91 }
92 _delay_ms(50);
93 ergodox_left_led_2_off();
94 if (!mcp23018_status) {
95 mcp23018_status = ergodox_left_leds_update();
96 }
97 _delay_ms(50);
98 ergodox_left_led_3_off();
99 if (!mcp23018_status) {
100 mcp23018_status = ergodox_left_leds_update();
101 }
102#endif
103
69 //ergodox_led_all_on(); 104 //ergodox_led_all_on();
70 //_delay_ms(333); 105 //_delay_ms(333);
71 ergodox_led_all_off(); 106 ergodox_led_all_off();
@@ -107,11 +142,49 @@ uint8_t init_mcp23018(void) {
107out: 142out:
108 i2c_stop(); 143 i2c_stop();
109 144
145#ifdef LEFT_LEDS
146 if (!mcp23018_status) mcp23018_status = ergodox_left_leds_update();
147#endif // LEFT_LEDS
148
110 // SREG=sreg_prev; 149 // SREG=sreg_prev;
111 150
112 return mcp23018_status; 151 return mcp23018_status;
113} 152}
114 153
154#ifdef LEFT_LEDS
155uint8_t ergodox_left_leds_update(void) {
156 if (mcp23018_status) { // if there was an error
157 return mcp23018_status;
158 }
159#define LEFT_LED_1_SHIFT 7 // in MCP23018 port B
160#define LEFT_LED_2_SHIFT 6 // in MCP23018 port B
161#define LEFT_LED_3_SHIFT 7 // in MCP23018 port A
162
163 // set logical value (doesn't matter on inputs)
164 // - unused : hi-Z : 1
165 // - input : hi-Z : 1
166 // - driving : hi-Z : 1
167 mcp23018_status = i2c_start(I2C_ADDR_WRITE);
168 if (mcp23018_status) goto out;
169 mcp23018_status = i2c_write(OLATA);
170 if (mcp23018_status) goto out;
171 mcp23018_status = i2c_write(0b11111111
172 & ~(ergodox_left_led_3<<LEFT_LED_3_SHIFT)
173 );
174 if (mcp23018_status) goto out;
175 mcp23018_status = i2c_write(0b11111111
176 & ~(ergodox_left_led_2<<LEFT_LED_2_SHIFT)
177 & ~(ergodox_left_led_1<<LEFT_LED_1_SHIFT)
178 );
179 if (mcp23018_status) goto out;
180
181 out:
182 i2c_stop();
183 return mcp23018_status;
184}
185#endif
186
187
115#ifdef ONEHAND_ENABLE 188#ifdef ONEHAND_ENABLE
116__attribute__ ((weak)) 189__attribute__ ((weak))
117// swap-hands action needs a matrix to define the swap 190// swap-hands action needs a matrix to define the swap
diff --git a/keyboards/ergodox_ez/ergodox_ez.h b/keyboards/ergodox_ez/ergodox_ez.h
index 1f8d59751..a6890a70c 100644
--- a/keyboards/ergodox_ez/ergodox_ez.h
+++ b/keyboards/ergodox_ez/ergodox_ez.h
@@ -46,12 +46,31 @@ inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6);
46inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); } 46inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
47inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); } 47inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); }
48 48
49#ifdef LEFT_LEDS
50bool ergodox_left_led_1;
51bool ergodox_left_led_2;
52bool ergodox_left_led_3;
53
54inline void ergodox_left_led_1_on(void) { ergodox_left_led_1 = 1; }
55inline void ergodox_left_led_2_on(void) { ergodox_left_led_2 = 1; }
56inline void ergodox_left_led_3_on(void) { ergodox_left_led_3 = 1; }
57
58inline void ergodox_left_led_1_off(void) { ergodox_left_led_1 = 0; }
59inline void ergodox_left_led_2_off(void) { ergodox_left_led_2 = 0; }
60inline void ergodox_left_led_3_off(void) { ergodox_left_led_3 = 0; }
61#endif // LEFT_LEDS
62
49inline void ergodox_led_all_on(void) 63inline void ergodox_led_all_on(void)
50{ 64{
51 ergodox_board_led_on(); 65 ergodox_board_led_on();
52 ergodox_right_led_1_on(); 66 ergodox_right_led_1_on();
53 ergodox_right_led_2_on(); 67 ergodox_right_led_2_on();
54 ergodox_right_led_3_on(); 68 ergodox_right_led_3_on();
69#ifdef LEFT_LEDS
70 ergodox_left_led_1_on();
71 ergodox_left_led_2_on();
72 ergodox_left_led_3_on();
73#endif // LEFT_LEDS
55} 74}
56 75
57inline void ergodox_led_all_off(void) 76inline void ergodox_led_all_off(void)
@@ -60,6 +79,11 @@ inline void ergodox_led_all_off(void)
60 ergodox_right_led_1_off(); 79 ergodox_right_led_1_off();
61 ergodox_right_led_2_off(); 80 ergodox_right_led_2_off();
62 ergodox_right_led_3_off(); 81 ergodox_right_led_3_off();
82#ifdef LEFT_LEDS
83 ergodox_left_led_1_off();
84 ergodox_left_led_2_off();
85 ergodox_left_led_3_off();
86#endif // LEFT_LEDS
63} 87}
64 88
65inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; } 89inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; }
diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c
index b743cf0d6..70efb43d8 100644
--- a/keyboards/ergodox_ez/matrix.c
+++ b/keyboards/ergodox_ez/matrix.c
@@ -202,6 +202,9 @@ uint8_t matrix_scan(void)
202 } 202 }
203#endif 203#endif
204 204
205#ifdef LEFT_LEDS
206 mcp23018_status = ergodox_left_leds_update();
207#endif // LEFT_LEDS
205 for (uint8_t i = 0; i < MATRIX_ROWS; i++) { 208 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
206 select_row(i); 209 select_row(i);
207 wait_us(30); // without this wait read unstable value. 210 wait_us(30); // without this wait read unstable value.
diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk
index e0111272a..3d6b18fea 100644
--- a/keyboards/ergodox_ez/rules.mk
+++ b/keyboards/ergodox_ez/rules.mk
@@ -66,6 +66,10 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
66# USBaspLoader 2048 66# USBaspLoader 2048
67OPT_DEFS += -DBOOTLOADER_SIZE=512 67OPT_DEFS += -DBOOTLOADER_SIZE=512
68 68
69# If you have Left LEDs (see
70# https://geekhack.org/index.php?topic=22780.msg873819#msg873819 for
71# details), include the following define:
72# OPT_DEFS += -DLEFT_LEDS
69 73
70# Build Options 74# Build Options
71# comment out to disable the options. 75# comment out to disable the options.