jsoltren/XMIT build fixes for macOS
[jackhill/qmk/firmware.git] / keyboards / xwhatsit / matrix.c
index 9f0d833..70a380a 100644 (file)
@@ -125,7 +125,8 @@ void dac_write_threshold(uint16_t value)
 
 #endif
 
-#define SHIFT_BITS ((CAPSENSE_KEYMAP_COL_TO_PHYSICAL_COL(MATRIX_COLS - 1) >= 16) ? 24 : 16)
+#define SHIFT_BITS (((CAPSENSE_KEYMAP_COL_TO_PHYSICAL_COL(MATRIX_COLS - 1) >= 16) || \
+                     (CAPSENSE_KEYMAP_COL_TO_PHYSICAL_COL(0) >= 16)) ? 24 : 16)
 
 void shift_select_nothing(void)
 {
@@ -140,18 +141,25 @@ void shift_select_nothing(void)
     writePin(CAPSENSE_SHIFT_STCP, 0);
 }
 
-void shift_data(uint32_t data)
+void shift_data(uint32_t data, int data_idle, int shcp_idle, int stcp_idle)
 {
     int i;
+    writePin(CAPSENSE_SHIFT_SHCP, 0);
+    writePin(CAPSENSE_SHIFT_STCP, 0);
     for (i=SHIFT_BITS-1; i>=0; i--)
     {
         writePin(CAPSENSE_SHIFT_DIN, (data >> (SHIFT_BITS - 1)) & 1);
         writePin(CAPSENSE_SHIFT_SHCP, 1);
-        writePin(CAPSENSE_SHIFT_SHCP, 0);
+        if (!((i == 0) && (shcp_idle))) {
+            writePin(CAPSENSE_SHIFT_SHCP, 0);
+        }
         data <<= 1;
     }
     writePin(CAPSENSE_SHIFT_STCP, 1);
-    writePin(CAPSENSE_SHIFT_STCP, 0);
+    if (!stcp_idle) {
+        writePin(CAPSENSE_SHIFT_STCP, 0);
+    }
+    writePin(CAPSENSE_SHIFT_DIN, !!data_idle);
 }
 
 void shift_select_col_no_strobe(uint8_t col)
@@ -178,6 +186,7 @@ void shift_init(void)
     setPinOutput(CAPSENSE_SHIFT_OE);
     setPinOutput(CAPSENSE_SHIFT_STCP);
     setPinOutput(CAPSENSE_SHIFT_SHCP);
+    writePin(CAPSENSE_SHIFT_OE, 0);
     writePin(CAPSENSE_SHIFT_STCP, 0);
     writePin(CAPSENSE_SHIFT_SHCP, 0);
     shift_select_nothing();
@@ -621,8 +630,46 @@ void calibration(void)
     }
 }
 
+void set_leds(int num_lock, int caps_lock, int scroll_lock)
+{
+    #if defined(LED_NUM_LOCK_PIN)
+        #if defined(LED_NUM_LOCK_ACTIVE_LOW)
+            writePin(LED_NUM_LOCK_PIN, !num_lock);
+        #else
+            writePin(LED_NUM_LOCK_PIN, num_lock);
+        #endif
+    #endif
+    #if defined(LED_CAPS_LOCK_PIN)
+        #if defined(LED_CAPS_LOCK_ACTIVE_LOW)
+            writePin(LED_CAPS_LOCK_PIN, !caps_lock);
+        #else
+            writePin(LED_CAPS_LOCK_PIN, caps_lock);
+        #endif
+    #endif
+    #if defined(LED_SCROLL_LOCK_PIN)
+        #if defined(LED_SCROLL_LOCK_ACTIVE_LOW)
+            writePin(LED_SCROLL_LOCK_PIN, !scroll_lock);
+        #else
+            writePin(LED_SCROLL_LOCK_PIN, scroll_lock);
+        #endif
+    #endif
+}
+
 void real_keyboard_init_basic(void)
 {
+    SETUP_UNUSED_PINS();
+
+    #if defined(LED_NUM_LOCK_PIN)
+        setPinOutput(LED_NUM_LOCK_PIN);
+    #endif
+    #if defined(LED_CAPS_LOCK_PIN)
+        setPinOutput(LED_CAPS_LOCK_PIN);
+    #endif
+    #if defined(LED_SCROLL_LOCK_PIN)
+        setPinOutput(LED_SCROLL_LOCK_PIN);
+    #endif
+    set_leds(0, 0, 0);
+
     #ifndef NO_PRINT
     uprintf("shift_init()");
     #endif
@@ -635,6 +682,7 @@ void real_keyboard_init_basic(void)
     #ifndef NO_PRINT
     uprintf(" DONE\n");
     #endif
+    SETUP_ROW_GPIOS();
     #if CAPSENSE_CAL_ENABLED
     calibration();
     #else
@@ -642,7 +690,7 @@ void real_keyboard_init_basic(void)
     dac_write_threshold(CAPSENSE_HARDCODED_THRESHOLD);
     dac_write_threshold(CAPSENSE_HARDCODED_THRESHOLD);
     #endif
-    #if defined(CONTROLLER_IS_THROUGH_HOLE_BEAMSPRING)
+    #if defined(CONTROLLER_IS_THROUGH_HOLE_BEAMSPRING) || defined(CONTROLLER_IS_THROUGH_HOLE_MODEL_F)
         // Disable on-board leds.
         setPinOutput(D5);
         writePin(D5, 1);
@@ -656,7 +704,18 @@ void real_keyboard_init_basic(void)
     #endif
 }
 
+
+bool led_update_kb(led_t led_state) {
+    bool res = led_update_user(led_state);
+    if(res) {
+        set_leds(led_state.num_lock, led_state.caps_lock, led_state.scroll_lock);
+    }
+    return res;
+}
+
 void matrix_init_custom(void) {
+
+
     //test_v2();
     //tracking_test();
     real_keyboard_init_basic();