forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Dip Switch as a core feature (qmk#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 <[email protected]> * Remove custom matrix line completely Rather than just disabling it Co-Authored-By: fauxpark <[email protected]> * DIP changes Co-Authored-By: fauxpark <[email protected]> * 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 <[email protected]> * Fix issues with docs and use example from @tuzonghua * Fix wording Co-Authored-By: fauxpark <[email protected]> * Fix example to use proper formatting Bad, BAAAAAAD drashna!!! * Handle dip switch initialization better
- Loading branch information
Showing
20 changed files
with
256 additions
and
393 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.