aboutsummaryrefslogtreecommitdiff
path: root/docs/feature_dip_switch.md
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2019-09-03 08:34:31 -0700
committerGitHub <noreply@github.com>2019-09-03 08:34:31 -0700
commitdab4967f1bebc9a70374ed3e1fe7906828b280c2 (patch)
tree3008882538fe229273fe9b8d5be662a951460f33 /docs/feature_dip_switch.md
parent9f46606dff2f52f31c6c36a63035cfb75824276a (diff)
downloadqmk_firmware-dab4967f1bebc9a70374ed3e1fe7906828b280c2.tar.gz
qmk_firmware-dab4967f1bebc9a70374ed3e1fe7906828b280c2.zip
Add Dip Switch as a core feature (#6140)
* Add Dip Switches as a core feature * Add documentation for Dip Switch feature * Update Preonic Rev3 to use new feature and remove custom matrix * Apply suggestions from code review Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com> * Remove custom matrix line completely Rather than just disabling it Co-Authored-By: fauxpark <fauxpark@gmail.com> * DIP changes Co-Authored-By: fauxpark <fauxpark@gmail.com> * Use better check for DIP Switch configuration * Add to show features * Add bitmask callback for dip switch * Fix OLKB Boards dip switch config * Update docs to include bitmask example * Fix comments/documentation Co-Authored-By: fauxpark <fauxpark@gmail.com> * Fix issues with docs and use example from @tuzonghua * Fix wording Co-Authored-By: fauxpark <fauxpark@gmail.com> * Fix example to use proper formatting Bad, BAAAAAAD drashna!!! * Handle dip switch initialization better
Diffstat (limited to 'docs/feature_dip_switch.md')
-rw-r--r--docs/feature_dip_switch.md90
1 files changed, 90 insertions, 0 deletions
diff --git a/docs/feature_dip_switch.md b/docs/feature_dip_switch.md
new file mode 100644
index 000000000..bce47fed8
--- /dev/null
+++ b/docs/feature_dip_switch.md
@@ -0,0 +1,90 @@
1# DIP Switches
2
3DIP switches are supported by adding this to your `rules.mk`:
4
5 DIP_SWITCH_ENABLE = yes
6
7and this to your `config.h`:
8
9```c
10#define DIP_SWITCH_PINS { B14, A15, A10, B9 }
11```
12
13## Callbacks
14
15The callback functions can be inserted into your `<keyboard>.c`:
16
17```c
18void dip_switch_update_kb(uint8_t index, bool active) {
19 dip_switch_update_user(index, active);
20}
21```
22
23
24or `keymap.c`:
25
26```c
27void dip_switch_update_user(uint8_t index, bool active) {
28 switch (index) {
29 case 0:
30 if(active) { audio_on(); } else { audio_off(); }
31 break;
32 case 1:
33 if(active) { clicky_on(); } else { clicky_off(); }
34 break;
35 case 2:
36 if(active) { music_on(); } else { music_off(); }
37 break;
38 case 3:
39 if (active) {
40 #ifdef AUDIO_ENABLE
41 PLAY_SONG(plover_song);
42 #endif
43 layer_on(_PLOVER);
44 } else {
45 #ifdef AUDIO_ENABLE
46 PLAY_SONG(plover_gb_song);
47 #endif
48 layer_off(_PLOVER);
49 }
50 break;
51 }
52}
53```
54
55Additionally, we support bit mask functions which allow for more complex handling.
56
57
58```c
59void dip_switch_update_mask_kb(uint32_t state) {
60 dip_switch_update_mask_user(state);
61}
62```
63
64
65or `keymap.c`:
66
67```c
68void dip_switch_update_mask_user(uint32_t state) {
69 if (state & (1UL<<0) && state & (1UL<<1)) {
70 layer_on(_ADJUST); // C on esc
71 } else {
72 layer_off(_ADJUST);
73 }
74 if (state & (1UL<<0)) {
75 layer_on(_TEST_A); // A on ESC
76 } else {
77 layer_off(_TEST_A);
78 }
79 if (state & (1UL<<1)) {
80 layer_on(_TEST_B); // B on esc
81 } else {
82 layer_off(_TEST_B);
83 }
84}
85```
86
87
88## Hardware
89
90One side of the DIP switch should be wired directly to the pin on the MCU, and the other side to ground. It should not matter which side is connected to which, as it should be functionally the same.