diff options
author | Drashna Jaelre <drashna@live.com> | 2019-09-03 08:34:31 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-03 08:34:31 -0700 |
commit | dab4967f1bebc9a70374ed3e1fe7906828b280c2 (patch) | |
tree | 3008882538fe229273fe9b8d5be662a951460f33 /docs | |
parent | 9f46606dff2f52f31c6c36a63035cfb75824276a (diff) | |
download | qmk_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')
-rw-r--r-- | docs/_summary.md | 1 | ||||
-rw-r--r-- | docs/feature_dip_switch.md | 90 | ||||
-rw-r--r-- | docs/features.md | 1 | ||||
-rw-r--r-- | docs/zh-cn/_summary.md | 1 |
4 files changed, 93 insertions, 0 deletions
diff --git a/docs/_summary.md b/docs/_summary.md index d7a49a9687..4e87d8f1f2 100644 --- a/docs/_summary.md +++ b/docs/_summary.md @@ -63,6 +63,7 @@ * [Combos](feature_combo.md) * [Command](feature_command.md) * [Debounce API](feature_debounce_type.md) + * [DIP Switch](feature_dip_switch.md) * [Dynamic Macros](feature_dynamic_macros.md) * [Encoders](feature_encoders.md) * [Grave Escape](feature_grave_esc.md) diff --git a/docs/feature_dip_switch.md b/docs/feature_dip_switch.md new file mode 100644 index 0000000000..bce47fed88 --- /dev/null +++ b/docs/feature_dip_switch.md @@ -0,0 +1,90 @@ +# DIP Switches + +DIP switches are supported by adding this to your `rules.mk`: + + DIP_SWITCH_ENABLE = yes + +and this to your `config.h`: + +```c +#define DIP_SWITCH_PINS { B14, A15, A10, B9 } +``` + +## Callbacks + +The callback functions can be inserted into your `<keyboard>.c`: + +```c +void dip_switch_update_kb(uint8_t index, bool active) { + dip_switch_update_user(index, active); +} +``` + + +or `keymap.c`: + +```c +void dip_switch_update_user(uint8_t index, bool active) { + switch (index) { + case 0: + if(active) { audio_on(); } else { audio_off(); } + break; + case 1: + if(active) { clicky_on(); } else { clicky_off(); } + break; + case 2: + if(active) { music_on(); } else { music_off(); } + break; + case 3: + if (active) { + #ifdef AUDIO_ENABLE + PLAY_SONG(plover_song); + #endif + layer_on(_PLOVER); + } else { + #ifdef AUDIO_ENABLE + PLAY_SONG(plover_gb_song); + #endif + layer_off(_PLOVER); + } + break; + } +} +``` + +Additionally, we support bit mask functions which allow for more complex handling. + + +```c +void dip_switch_update_mask_kb(uint32_t state) { + dip_switch_update_mask_user(state); +} +``` + + +or `keymap.c`: + +```c +void dip_switch_update_mask_user(uint32_t state) { + if (state & (1UL<<0) && state & (1UL<<1)) { + layer_on(_ADJUST); // C on esc + } else { + layer_off(_ADJUST); + } + if (state & (1UL<<0)) { + layer_on(_TEST_A); // A on ESC + } else { + layer_off(_TEST_A); + } + if (state & (1UL<<1)) { + layer_on(_TEST_B); // B on esc + } else { + layer_off(_TEST_B); + } +} +``` + + +## Hardware + +One 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. diff --git a/docs/features.md b/docs/features.md index f230c7c233..44299bf10d 100644 --- a/docs/features.md +++ b/docs/features.md @@ -12,6 +12,7 @@ QMK has a staggering number of features for building your keyboard. It can take * [Combos](feature_combo.md) - Custom actions for multiple key holds. * [Command](feature_command.md) - Runtime version of bootmagic (Formerly known as "Magic"). * [Debounce API](feature_debounce_type.md) - Customization of debouncing algorithms, and the ability to add more/custom debouncing. +* [DIP Switch](feature_dip_switch.md) - Toggle switches for customizing board function. * [Dynamic Macros](feature_dynamic_macros.md) - Record and playback macros from the keyboard itself. * [Encoders](feature_encoders.md) - Rotary encoders! * [Grave Escape](feature_grave_esc.md) - Lets you use a single key for Esc and Grave. diff --git a/docs/zh-cn/_summary.md b/docs/zh-cn/_summary.md index b0d9f1c068..98b1440d9f 100644 --- a/docs/zh-cn/_summary.md +++ b/docs/zh-cn/_summary.md @@ -54,6 +54,7 @@ * [热改键](feature_bootmagic.md) * [组合](feature_combo) * [命令](feature_command.md) + * [拨动开关](feature_dip_switch.md) * [动态宏指令](feature_dynamic_macros.md) * [编码器](feature_encoders.md) * [重音号Esc复合键](feature_grave_esc.md) |