aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgorbachev <tpp+github@iki.fi>2019-01-11 20:27:15 -0500
committerDrashna Jaelre <drashna@live.com>2019-01-11 17:27:15 -0800
commit81ad6cac7e850e1962fcc2c4057f5357a0056838 (patch)
treed0af908512950ccbbf01c817b0ca59fdd9e2c09a
parent9c136e1168a1f6d0637f59164b6d9adb9ba0bdee (diff)
downloadqmk_firmware-81ad6cac7e850e1962fcc2c4057f5357a0056838.tar.gz
qmk_firmware-81ad6cac7e850e1962fcc2c4057f5357a0056838.zip
[Keymap] Sweet16 as a switch tester (#4822)
* Sweet16 as a switch tester * pragma once * QMK_KEYBOARD_H instead of sweet16.h
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c31
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/readme.md5
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/rules.mk12
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c99
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h189
5 files changed, 336 insertions, 0 deletions
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c
new file mode 100644
index 000000000..caab5b343
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/keymap.c
@@ -0,0 +1,31 @@
1#include QMK_KEYBOARD_H
2#include "switches.h"
3
4const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
5 LAYOUT_ortho_4x4(
6 KC_NO, KC_NO, KC_NO, KC_NO,
7 KC_NO, KC_NO, KC_NO, KC_NO,
8 KC_NO, KC_NO, KC_NO, KC_NO,
9 KC_NO, KC_NO, KC_NO, KC_NO
10 )
11};
12
13struct mechswitch switches[MATRIX_ROWS][MATRIX_COLS] = {
14 {CHERRY_MX_BLUE, CHERRY_MX_RED, CHERRY_MX_BLACK, CHERRY_MX_BROWN},
15 {GATERON_BLUE, GATERON_RED, GATERON_BLACK, GATERON_BROWN},
16 {KAILH_BLUE, KAILH_RED, KAILH_BLACK, KAILH_BROWN},
17 {HAKO_CLEAR, HAKO_TRUE, HAKO_VIOLET, HAKO_ROYAL_TRUE}
18};
19
20bool process_record_user(uint16_t keycode, keyrecord_t *record) {
21 uint8_t col = record->event.key.col;
22 uint8_t row = record->event.key.row;
23
24 if (record->event.pressed) {
25 char name[MAX_SWITCH_NAME_LENGTH];
26 switch_name(switches[row][col], name);
27 send_string(name);
28 SEND_STRING("\n");
29 }
30 return false;
31}
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/readme.md b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/readme.md
new file mode 100644
index 000000000..9edb4e181
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/readme.md
@@ -0,0 +1,5 @@
1# Sweet16 as a switch tester
2
3This keymap uses the Sweet16 as a switch tester. The functionality outputs the switch name of whatever key the user pressed.
4
5the `switches` two-dimensional (4x4) array contains the switches attached to the macropad. The switches supported are defined as macros in the `switches.h` header file.
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/rules.mk b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/rules.mk
new file mode 100644
index 000000000..c0f2d0182
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/rules.mk
@@ -0,0 +1,12 @@
1# Build Options
2# comment out to disable the options.
3#
4BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
5MOUSEKEY_ENABLE = no # Mouse keys(+4700)
6EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
7CONSOLE_ENABLE = yes # Console for debug(+400)
8COMMAND_ENABLE = yes # Commands for debug and configuration
9NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
10RGBLIGHT_ENABLE = no
11
12SRC += switches.c
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c
new file mode 100644
index 000000000..ae3799544
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.c
@@ -0,0 +1,99 @@
1#include <stdio.h>
2#include <string.h>
3#include "switches.h"
4
5static const char *BRAND_NAMES[] = {
6 "Kailh",
7 "Kailh Low Profile Choc",
8 "Gateron",
9 "Cherry MX",
10 "Cherry ML",
11 "Outemu",
12 "Greetech",
13 "Varmilo",
14 "MOD",
15 "Hako"
16};
17
18static const char *COLOR_NAMES[] = {
19 "",
20 "White",
21 "Black",
22 "Blue",
23 "Red",
24 "Yellow",
25 "Brown",
26 "Green",
27 "Clear",
28 "Silver",
29 "Nature White",
30 "Grey",
31 "Jade",
32 "Navy",
33 "Burnt Orange",
34 "Pale Blue",
35 "Dark Yellow",
36 "Gold",
37 "Chocolate White",
38 "Burgundy",
39 "Purple",
40 "Light Green",
41 "True",
42 "Berry",
43 "Plum",
44 "Sage",
45 "Violet",
46 "L",
47 "M",
48 "H",
49 "SH"
50};
51
52static const char *VARIANT_NAMES[] = {
53 "",
54 "BOX",
55 "BOX Thick",
56 "BOX Heavy",
57 "Silent",
58 "Tactile",
59 "Linear",
60 "Speed",
61 "Speed Heavy",
62 "Speed Thick Click",
63 "Pro",
64 "Pro Heavy",
65 "Royal",
66 "Thick Click",
67 "Heavy"
68};
69
70const char *brand_name(struct mechswitch ms) {
71 return BRAND_NAMES[ms.brand - 1];
72}
73
74const char *variant_name(struct mechswitch ms) {
75 return VARIANT_NAMES[ms.variant];
76}
77
78const char *color_name(struct mechswitch ms) {
79 return COLOR_NAMES[ms.color];
80}
81
82void switch_name(struct mechswitch ms, char *buf) {
83 const char *v_name = variant_name(ms);
84 const char *c_name = color_name(ms);
85
86 snprintf(buf, MAX_SWITCH_NAME_LENGTH, "%s", brand_name(ms));
87 strncat(buf, " ", MAX_SWITCH_NAME_LENGTH - strlen(buf));
88 if (strlen(v_name) > 0) {
89 strncat(buf, v_name, MAX_SWITCH_NAME_LENGTH - strlen(buf));
90 strncat(buf, " ", MAX_SWITCH_NAME_LENGTH - strlen(buf));
91 }
92 if (strlen(c_name) > 0) {
93 strncat(buf, c_name, MAX_SWITCH_NAME_LENGTH - strlen(buf));
94 }
95}
96
97int bitfieldtoi(struct mechswitch ms) {
98 return ((ms.brand << 9) | (ms.variant << 5) | ms.color);
99}
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h
new file mode 100644
index 000000000..6e58068bf
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/switchtester/switches.h
@@ -0,0 +1,189 @@
1#pragma once
2
3struct mechswitch
4{
5 unsigned int brand: 4;
6 unsigned int variant: 4;
7 unsigned int color: 5;
8};
9
10#define MAX_SWITCH_NAME_LENGTH 256
11
12#define BRAND_KAILH 1
13#define BRAND_KAILH_LOW 2
14#define BRAND_GATERON 3
15#define BRAND_CHERRY_MX 4
16#define BRAND_CHERRY_ML 5
17#define BRAND_OUTEMU 6
18#define BRAND_GREETECH 7
19#define BRAND_VARMILO 8
20#define BRAND_MOD 9
21#define BRAND_HAKO 10
22
23#define COLOR_NO 0
24#define COLOR_WHITE 1
25#define COLOR_BLACK 2
26#define COLOR_BLUE 3
27#define COLOR_RED 4
28#define COLOR_YELLOW 5
29#define COLOR_BROWN 6
30#define COLOR_GREEN 7
31#define COLOR_CLEAR 8
32#define COLOR_SILVER 9
33#define COLOR_NATURE_WHITE 10
34#define COLOR_GREY 11
35#define COLOR_JADE 12
36#define COLOR_NAVY 13
37#define COLOR_BURNT_ORANGE 14
38#define COLOR_PALE_BLUE 15
39#define COLOR_DARK_YELLOW 16
40#define COLOR_GOLD 17
41#define COLOR_CHOCOLATE_WHITE 18
42#define COLOR_BURGUNDY 19
43#define COLOR_PURPLE 20
44#define COLOR_LIGHT_GREEN 21
45#define COLOR_TRUE 22
46#define COLOR_BERRY 23
47#define COLOR_PLUM 24
48#define COLOR_SAGE 25
49#define COLOR_VIOLET 26
50#define COLOR_L 27
51#define COLOR_M 28
52#define COLOR_H 29
53#define COLOR_SH 30
54
55#define VARIANT_NO 0
56#define VARIANT_BOX 1
57#define VARIANT_BOX_THICK 2
58#define VARIANT_BOX_HEAVY 3
59#define VARIANT_SILENT 4
60#define VARIANT_TACTILE 5
61#define VARIANT_LINEAR 6
62#define VARIANT_SPEED 7
63#define VARIANT_SPEED_HEAVY 8
64#define VARIANT_SPEED_CLICK_THICK 9
65#define VARIANT_PRO 10
66#define VARIANT_PRO_HEAVY 11
67#define VARIANT_ROYAL 12
68#define VARIANT_CLICK_THICK 13
69
70#define CHERRY_MX_BLUE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BLUE}
71#define CHERRY_MX_RED {BRAND_CHERRY_MX, VARIANT_NO, COLOR_RED}
72#define CHERRY_MX_BROWN {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BROWN}
73#define CHERRY_MX_BLACK {BRAND_CHERRY_MX, VARIANT_NO, COLOR_BLACK}
74#define CHERRY_MX_GREEN {BRAND_CHERRY_MX, VARIANT_NO, COLOR_GREEN}
75#define CHERRY_MX_CLEAR {BRAND_CHERRY_MX, VARIANT_NO, COLOR_CLEAR}
76#define CHERRY_MX_WHITE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_WHITE}
77#define CHERRY_MX_SILVER {BRAND_CHERRY_MX, VARIANT_NO, COLOR_SILVER}
78#define CHERRY_MX_NATURE_WHITE {BRAND_CHERRY_MX, VARIANT_NO, COLOR_NATURE_WHITE}
79#define CHERRY_MX_SILENT_BLACK {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_BLACK}
80#define CHERRY_MX_SILENT_RED {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_RED}
81#define CHERRY_MX_TACTILE_BLACK {BRAND_CHERRY_MX, VARIANT_SILENT, COLOR_GREY}
82#define CHERRY_MX_LINEAR_BLACK {BRAND_CHERRY_MX, VARIANT_LINEAR, COLOR_GREY}
83
84#define CHERRY_ML {BRAND_CHERRY_ML, VARIANT_NO, COLOR_NO}
85
86#define GATERON_BLUE {BRAND_GATERON, VARIANT_NO, COLOR_BLUE}
87#define GATERON_BROWN {BRAND_GATERON, VARIANT_NO, COLOR_BROWN}
88#define GATERON_BLACK {BRAND_GATERON, VARIANT_NO, COLOR_BLACK}
89#define GATERON_RED {BRAND_GATERON, VARIANT_NO, COLOR_RED}
90#define GATERON_CLEAR {BRAND_GATERON, VARIANT_NO, COLOR_CLEAR}
91#define GATERON_GREEN {BRAND_GATERON, VARIANT_NO, COLOR_GREEN}
92#define GATERON_YELLOW {BRAND_GATERON, VARIANT_NO, COLOR_YELLOW}
93
94#define GATERON_SILENT_CLEAR {BRAND_GATERON, VARIANT_SILENT, COLOR_CLEAR}
95#define GATERON_SILENT_RED {BRAND_GATERON, VARIANT_SILENT, COLOR_RED}
96#define GATERON_SILENT_YELLOW {BRAND_GATERON, VARIANT_SILENT, COLOR_YELLOW}
97#define GATERON_SILENT_BLACK {BRAND_GATERON, VARIANT_SILENT, COLOR_BLACK}
98#define GATERON_SILENT_BROWN {BRAND_GATERON, VARIANT_SILENT, COLOR_BROWN}
99
100#define GREETECH_BLUE {BRAND_GREETECH, VARIANT_NO, COLOR_BLUE}
101#define GREETECH_BROWN {BRAND_GREETECH, VARIANT_NO, COLOR_BROWN}
102#define GREETECH_BLACK {BRAND_GREETECH, VARIANT_NO, COLOR_BLACK}
103#define GREETECH_RED {BRAND_GREETECH, VARIANT_NO, COLOR_RED}
104
105#define OUTEMU_BLUE {BRAND_OUTEMU, VARIANT_NO, COLOR_BLUE}
106#define OUTEMU_BROWN {BRAND_OUTEMU, VARIANT_NO, COLOR_BROWN}
107#define OUTEMU_BLACK {BRAND_OUTEMU, VARIANT_NO, COLOR_BLACK}
108#define OUTEMU_RED {BRAND_OUTEMU, VARIANT_NO, COLOR_RED}
109
110#define KAILH_BLUE {BRAND_KAILH, VARIANT_NO, COLOR_BLUE}
111#define KAILH_BROWN {BRAND_KAILH, VARIANT_NO, COLOR_BROWN}
112#define KAILH_BLACK {BRAND_KAILH, VARIANT_NO, COLOR_BLACK}
113#define KAILH_RED {BRAND_KAILH, VARIANT_NO, COLOR_RED}
114#define KAILH_GREEN {BRAND_KAILH, VARIANT_NO, COLOR_GREEN}
115
116#define KAILH_BOX_WHITE {BRAND_KAILH, VARIANT_BOX, COLOR_WHITE}
117#define KAILH_BOX_RED {BRAND_KAILH, VARIANT_BOX, COLOR_RED}
118#define KAILH_BOX_BLACK {BRAND_KAILH, VARIANT_BOX, COLOR_BLACK}
119#define KAILH_BOX_BROWN {BRAND_KAILH, VARIANT_BOX, COLOR_BROWN}
120#define KAILH_BOX_ROYAL {BRAND_KAILH, VARIANT_BOX, COLOR_ROYAL}
121
122#define KAILH_BOX_THICK_JADE {BRAND_KAILH, VARIANT_BOX_THICK, COLOR_JADE}
123#define KAILH_BOX_THICK_NAVY {BRAND_KAILH, VARIANT_BOX_THICK, COLOR_NAVY}
124#define KAILH_BOX_HEAVY_BURNT_ORANGE {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_BURNT_ORANGE}
125#define KAILH_BOX_HEAVY_PALE_BLUE {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_PALE_BLUE}
126#define KAILH_BOX_HEAVY_DARK_YELLOW {BRAND_KAILH, VARIANT_BOX_HEAVY, COLOR_DARK_YELLOW}
127
128#define KAILH_SPEED_BRONZE {BRAND_KAILH, VARIANT_SPEED, COLOR_BRONZE}
129#define KAILH_SPEED_COPPER {BRAND_KAILH, VARIANT_SPEED, COLOR_COPPER}
130#define KAILH_SPEED_GOLD {BRAND_KAILH, VARIANT_SPEED, COLOR_GOLD}
131#define KAILH_SPEED_SILVER {BRAND_KAILH, VARIANT_SPEED, COLOR_SILVER}
132
133#define KAILH_SPEED_HEAVY_BURNT_ORANGE {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_BURNT_ORANGE}
134#define KAILH_SPEED_HEAVY_PALE_BLUE {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_PALE_BLUE}
135#define KAILH_SPEED_HEAVY_DARK_YELLOW {BRAND_KAILH, VARIANT_SPEED_HEAVY, COLOR_DARK_YELLOW}
136
137#define KAILH_SPEED_THICK_CLICK_NAVY {BRAND_KAILH, VARIANT_SPEED_CLICK_THICK, COLOR_NAVY}
138
139#define KAILH_PRO_BURGUNDY {BRAND_KAILH, VARIANT_PRO, COLOR_BURGUNDY}
140#define KAILH_PRO_PURPLE {BRAND_KAILH, VARIANT_PRO, COLOR_PURPLE}
141#define KAILH_PRO_LIGHT_GREEN {BRAND_KAILH, VARIANT_PRO, COLOR_LIGHT_GREEN}
142
143#define KAILH_PRO_HEAVY_BERRY {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_BERRY}
144#define KAILH_PRO_HEAVY_PLUM {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_PLUM}
145#define KAILH_PRO_GEAVY_SAGE {BRAND_KAILH, VARIANT_PRO_HEAVY, COLOR_SAGE}
146
147#define KAILH_LOW_WHITE {BRAND_KAILH_LOW, VARIANT_NO, COLOR_WHITE}
148#define KAILH_LOW_BROWN {BRAND_KAILH_LOW, VARIANT_NO, COLOR_BROWN}
149#define KAILH_LOW_RED {BRAND_KAILH_LOW, VARIANT_NO, COLOR_RED}
150#define KAILH_LOW_CHOCOLATE_WHITE {BRAND_KAILH_LOW, VARIANT_NO, COLOR_CHOCOLATE_WHITE}
151#define KAILH_LOW_THICK_CLICK_NAVY {BRAND_KAILH_LOW, VARIANT_THICK_CLICK, COLOR_NAVY}
152#define KAILH_LOW_THICK_CLICK_JADE {BRAND_KAILH_LOW, VARIANT_THICK_CLICK, COLOR_JADE}
153#define KAILH_LOW_HEAVY_DARK_YELLOW {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_DARK_YELLOW}
154#define KAILH_LOW_HEAVY_BURNT_ORANGE {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_BURNT_ORANGE}
155#define KAILH_LOW_HEAVY_PALE_BLUE {BRAND_KAILH_LOW, VARIANT_HEAVY, COLOR_PALE_BLUE}
156
157#define HAKO_ROYAL_CLEAR {BRAND_HAKO, VARIANT_ROYAL, COLOR_CLEAR}
158#define HAKO_ROYAL_TRUE {BRAND_HAKO, VARIANT_ROYAL, COLOR_TRUE}
159
160#define HAKO_CLEAR {BRAND_HAKO, VARIANT_NO, COLOR_CLEAR}
161#define HAKO_TRUE {BRAND_HAKO, VARIANT_NO, COLOR_TRUE}
162#define HAKO_VIOLET {BRAND_HAKO, VARIANT_NO, COLOR_VIOLET}
163
164#define MOD_L_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_L}
165#define MOD_M_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_M}
166#define MOD_H_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_H}
167#define MOD_SH_TACTILE {BRAND_MOD, VARIANT_TACTILE, COLOR_SH}
168
169#define MOD_L_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_L}
170#define MOD_M_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_M}
171#define MOD_H_LINEAR {BRAND_MOD, VARIANT_LINEAR, COLOR_H}
172
173#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
174#define BYTE_TO_BINARY(byte) \
175 (byte & 0x80 ? '1' : '0'), \
176 (byte & 0x40 ? '1' : '0'), \
177 (byte & 0x20 ? '1' : '0'), \
178 (byte & 0x10 ? '1' : '0'), \
179 (byte & 0x08 ? '1' : '0'), \
180 (byte & 0x04 ? '1' : '0'), \
181 (byte & 0x02 ? '1' : '0'), \
182 (byte & 0x01 ? '1' : '0')
183
184
185const char *brand_name(struct mechswitch ms);
186const char *variant_name(struct mechswitch ms);
187const char *color_name(struct mechswitch ms);
188void switch_name(struct mechswitch ms, char *buf);
189int bitfieldtoi(struct mechswitch ms);