Преглед изворни кода

Added right vs left specific pin assignments for dip switch (#13074)

* Added right vs left specific pin assignments for dip switch

* Update feature_dip_switch.md

* Ran formatting tools
XScorpion2 пре 3 година
родитељ
комит
9d1c98c891
3 измењених фајлова са 28 додато и 3 уклоњено
  1. 2 1
      docs/feature_dip_switch.md
  2. 2 0
      docs/ja/feature_dip_switch.md
  3. 24 2
      quantum/dip_switch.c

+ 2 - 1
docs/feature_dip_switch.md

@@ -9,6 +9,8 @@ and this to your `config.h`:
 ```c
 // Connects each switch in the dip switch to the GPIO pin of the MCU
 #define DIP_SWITCH_PINS { B14, A15, A10, B9 }
+// For split keyboards, you can separately define the right side pins
+#define DIP_SWITCH_PINS_RIGHT { ... }
 ```
 
 or
@@ -96,7 +98,6 @@ bool dip_switch_update_mask_user(uint32_t state) {
 }
 ```
 
-
 ## Hardware
 
 ### Connects each switch in the dip switch to the GPIO pin of the MCU

+ 2 - 0
docs/ja/feature_dip_switch.md

@@ -14,6 +14,8 @@ DIP スイッチは、以下を `rules.mk` に追加することでサポート
 ```c
 // Connects each switch in the dip switch to the GPIO pin of the MCU
 #define DIP_SWITCH_PINS { B14, A15, A10, B9 }
+// For split keyboards, you can separately define the right side pins
+#define DIP_SWITCH_PINS_RIGHT { ... }
 ```
 
 あるいは

+ 24 - 2
quantum/dip_switch.c

@@ -17,6 +17,9 @@
  */
 
 #include "dip_switch.h"
+#ifdef SPLIT_KEYBOARD
+#    include "split_common/split_util.h"
+#endif
 
 // for memcpy
 #include <string.h>
@@ -32,6 +35,9 @@
 #ifdef DIP_SWITCH_PINS
 #    define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t))
 static pin_t dip_switch_pad[] = DIP_SWITCH_PINS;
+#    if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT)
+static pin_t dip_switch_pad_right[] = DIP_SWITCH_PINS_RIGHT;
+#    endif
 #endif
 
 #ifdef DIP_SWITCH_MATRIX_GRID
@@ -60,7 +66,15 @@ __attribute__((weak)) bool dip_switch_update_mask_kb(uint32_t state) { return di
 void dip_switch_init(void) {
 #ifdef DIP_SWITCH_PINS
     for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
-        setPinInputHigh(dip_switch_pad[i]);
+#    if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT)
+        if (isLeftHand) {
+#    endif
+            setPinInputHigh(dip_switch_pad[i]);
+#    if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT)
+        } else {
+            setPinInputHigh(dip_switch_pad_right[i]);
+        }
+#    endif
     }
     dip_switch_read(true);
 #endif
@@ -89,7 +103,15 @@ void dip_switch_read(bool forced) {
 
     for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
 #ifdef DIP_SWITCH_PINS
-        dip_switch_state[i] = !readPin(dip_switch_pad[i]);
+#    if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT)
+        if (isLeftHand) {
+#    endif
+            dip_switch_state[i] = !readPin(dip_switch_pad[i]);
+#    if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT)
+        } else {
+            dip_switch_state[i] = !readPin(dip_switch_pad_right[i]);
+        }
+#    endif
 #endif
 #ifdef DIP_SWITCH_MATRIX_GRID
         dip_switch_state[i] = peek_matrix(dip_switch_pad[i].row, dip_switch_pad[i].col, read_raw);