From bcfba27101cb649dd61ef470ed46ab93e28534e5 Mon Sep 17 00:00:00 2001
From: Don Armstrong <don@donarmstrong.com>
Date: Sun, 30 Apr 2017 20:47:40 -0700
Subject: [PATCH] add initial support for left leds on an ergodox ez

---
 keyboards/ergodox_ez/ergodox_ez.c | 39 +++++++++++++++++++++++++++++++
 keyboards/ergodox_ez/ergodox_ez.h | 24 +++++++++++++++++++
 2 files changed, 63 insertions(+)

diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c
index 3609f6f81..8337db666 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)
     _delay_ms(50);
     ergodox_right_led_3_on();
     _delay_ms(50);
+#ifdef LEFT_LEDS
+    ergodox_left_led_1_on();
+    _delay_ms(50);
+    if (!mcp23018_status) {
+      mcp23018_status = ergodox_left_leds_update();
+    }
+    ergodox_left_led_2_on();
+    _delay_ms(50);
+    if (!mcp23018_status) {
+      mcp23018_status = ergodox_left_leds_update();
+    }
+    ergodox_left_led_3_on();
+    _delay_ms(50);
+    if (!mcp23018_status) {
+      mcp23018_status = ergodox_left_leds_update();
+    }
+#endif
     ergodox_right_led_1_off();
     _delay_ms(50);
     ergodox_right_led_2_off();
     _delay_ms(50);
     ergodox_right_led_3_off();
+#ifdef LEFT_LEDS
+    _delay_ms(50);
+    ergodox_left_led_1_off();
+    if (!mcp23018_status) {
+      mcp23018_status = ergodox_left_leds_update();
+    }
+    _delay_ms(50);
+    ergodox_left_led_2_off();
+    if (!mcp23018_status) {
+      mcp23018_status = ergodox_left_leds_update();
+    }
+    _delay_ms(50);
+    ergodox_left_led_3_off();
+    if (!mcp23018_status) {
+      mcp23018_status = ergodox_left_leds_update();
+    }
+#endif
+    
     //ergodox_led_all_on();
     //_delay_ms(333);
     ergodox_led_all_off();
@@ -107,6 +142,10 @@ uint8_t init_mcp23018(void) {
 out:
     i2c_stop();
 
+#ifdef LEFT_LEDS
+    if (!mcp23018_status) mcp23018_status = ergodox_left_leds_update();
+#endif // LEFT_LEDS
+
     // SREG=sreg_prev;
 
     return mcp23018_status;
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);
 inline void ergodox_right_led_3_off(void)   { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
 inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); }
 
+#ifdef LEFT_LEDS
+bool ergodox_left_led_1;
+bool ergodox_left_led_2;
+bool ergodox_left_led_3;
+
+inline void ergodox_left_led_1_on(void)    { ergodox_left_led_1 = 1; }
+inline void ergodox_left_led_2_on(void)    { ergodox_left_led_2 = 1; }
+inline void ergodox_left_led_3_on(void)    { ergodox_left_led_3 = 1; }
+
+inline void ergodox_left_led_1_off(void)    { ergodox_left_led_1 = 0; }
+inline void ergodox_left_led_2_off(void)    { ergodox_left_led_2 = 0; }
+inline void ergodox_left_led_3_off(void)    { ergodox_left_led_3 = 0; }
+#endif // LEFT_LEDS
+
 inline void ergodox_led_all_on(void)
 {
     ergodox_board_led_on();
     ergodox_right_led_1_on();
     ergodox_right_led_2_on();
     ergodox_right_led_3_on();
+#ifdef LEFT_LEDS
+    ergodox_left_led_1_on();
+    ergodox_left_led_2_on();
+    ergodox_left_led_3_on();
+#endif // LEFT_LEDS
 }
 
 inline void ergodox_led_all_off(void)
@@ -60,6 +79,11 @@ inline void ergodox_led_all_off(void)
     ergodox_right_led_1_off();
     ergodox_right_led_2_off();
     ergodox_right_led_3_off();
+#ifdef LEFT_LEDS
+    ergodox_left_led_1_off();
+    ergodox_left_led_2_off();
+    ergodox_left_led_3_off();
+#endif // LEFT_LEDS
 }
 
 inline void ergodox_right_led_1_set(uint8_t n)    { OCR1A = n; }