diff options
Diffstat (limited to 'keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c')
| -rw-r--r-- | keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c | 186 |
1 files changed, 142 insertions, 44 deletions
diff --git a/keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c b/keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c index 2ce15d7e7..80b188a48 100644 --- a/keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c +++ b/keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c | |||
| @@ -21,25 +21,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 21 | #include QMK_KEYBOARD_H | 21 | #include QMK_KEYBOARD_H |
| 22 | 22 | ||
| 23 | #include "stdio.h" | 23 | #include "stdio.h" |
| 24 | #include <unistd.h> | 24 | #include "raw_hid.h" |
| 25 | #include <string.h> | 25 | #include <string.h> |
| 26 | #include <stdlib.h> | ||
| 27 | #include <math.h> | ||
| 26 | 28 | ||
| 27 | #define LOGO_SIZE 384 | 29 | #define LOGO_SIZE 384 |
| 28 | 30 | ||
| 29 | bool rgbToggled = false; | 31 | bool rgbToggled = false; |
| 30 | bool altToggled = false; | 32 | bool altToggled = false; |
| 33 | bool sysToggled = false; | ||
| 31 | 34 | ||
| 32 | enum layer_codes { | 35 | enum layer_codes { |
| 33 | RGB_LAYER = SAFE_RANGE, | 36 | RGB_LAYER = SAFE_RANGE, |
| 34 | ALT_LAYER | 37 | ALT_LAYER, |
| 35 | }; | 38 | SYS_LAYER, |
| 36 | 39 | CLOCK_TOGGLE | |
| 37 | enum my_keycodes { | ||
| 38 | Z0 = SAFE_RANGE, Z1, Z2, | ||
| 39 | Z3, Z4, Z5, | ||
| 40 | Z6, Z7, Z8, | ||
| 41 | Z9, Z10, Z11, | ||
| 42 | Z12, Z13, Z14 | ||
| 43 | }; | 40 | }; |
| 44 | 41 | ||
| 45 | #define MAC_1 LCTL(LALT(KC_MINS)) | 42 | #define MAC_1 LCTL(LALT(KC_MINS)) |
| @@ -65,6 +62,14 @@ enum my_keycodes { | |||
| 65 | #define _DEFAULT 0 | 62 | #define _DEFAULT 0 |
| 66 | #define _RGB 1 | 63 | #define _RGB 1 |
| 67 | #define _ALT 2 | 64 | #define _ALT 2 |
| 65 | #define _SYS 3 | ||
| 66 | |||
| 67 | float cpuFreq = 0; | ||
| 68 | int memPerc = 0; | ||
| 69 | int gpuLoad = 0; | ||
| 70 | int temp = 0; | ||
| 71 | int hour = 0; | ||
| 72 | int minute = 0; | ||
| 68 | 73 | ||
| 69 | 74 | ||
| 70 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 75 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
| @@ -78,7 +83,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 78 | |=========================================| | 83 | |=========================================| |
| 79 | | Macro 4 | Macro 5 | Macro 6 | | 84 | | Macro 4 | Macro 5 | Macro 6 | |
| 80 | |=========================================| ,---------------------. | 85 | |=========================================| ,---------------------. |
| 81 | | Macro 7 | Macro 8 | Macro 9 | | RGB Menu | Alt Menu | | 86 | | Macro 7 | Macro 8 | Sys. Info | | RGB Menu | Alt Menu | |
| 82 | `=========================================' `--------------------' | 87 | `=========================================' `--------------------' |
| 83 | */ | 88 | */ |
| 84 | [_DEFAULT] = LAYOUT( | 89 | [_DEFAULT] = LAYOUT( |
| @@ -86,7 +91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 86 | KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, | 91 | KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, |
| 87 | MAC_1, MAC_2, MAC_3, | 92 | MAC_1, MAC_2, MAC_3, |
| 88 | MAC_4, MAC_5, MAC_6, | 93 | MAC_4, MAC_5, MAC_6, |
| 89 | MAC_7, MAC_8, MAC_9, | 94 | CLOCK_TOGGLE, MAC_8, SYS_LAYER, |
| 90 | RGB_LAYER, ALT_LAYER | 95 | RGB_LAYER, ALT_LAYER |
| 91 | ), | 96 | ), |
| 92 | /* | 97 | /* |
| @@ -120,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 120 | |=========================================| | 125 | |=========================================| |
| 121 | | Macro 13 | Macro 14 | Macro 15 | | 126 | | Macro 13 | Macro 14 | Macro 15 | |
| 122 | |=========================================| ,----------------------. | 127 | |=========================================| ,----------------------. |
| 123 | | Macro 16 | Macro 17 | Macro 18 | | Norm Menu | Alt Menu | | 128 | | Macro 16 | Macro 17 | Sys. Info | | Norm Menu | Alt Menu | |
| 124 | `=========================================' `---------------------' | 129 | `=========================================' `---------------------' |
| 125 | */ | 130 | */ |
| 126 | [_ALT] = LAYOUT( | 131 | [_ALT] = LAYOUT( |
| @@ -128,24 +133,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 128 | KC_UNDO, KC_CUT, KC_COPY, | 133 | KC_UNDO, KC_CUT, KC_COPY, |
| 129 | KC_PASTE, KC_FIND, KC_PSCR, | 134 | KC_PASTE, KC_FIND, KC_PSCR, |
| 130 | MAC_13, MAC_14, MAC_15, | 135 | MAC_13, MAC_14, MAC_15, |
| 131 | MAC_16, MAC_17, MAC_18, | 136 | CLOCK_TOGGLE, MAC_17, SYS_LAYER, |
| 137 | RGB_LAYER, ALT_LAYER | ||
| 138 | ), | ||
| 139 | [_SYS] = LAYOUT( | ||
| 140 | KC_NO, KC_NO, KC_NO, | ||
| 141 | KC_NO, KC_NO, KC_NO, | ||
| 142 | KC_NO, KC_NO, KC_NO, | ||
| 143 | KC_NO, KC_NO, KC_NO, | ||
| 144 | CLOCK_TOGGLE, KC_NO, SYS_LAYER, | ||
| 132 | RGB_LAYER, ALT_LAYER | 145 | RGB_LAYER, ALT_LAYER |
| 133 | ) | 146 | ) |
| 134 | }; | 147 | }; |
| 135 | 148 | ||
| 136 | static void render_logo(void) { | 149 | static void render_logo(void) { |
| 137 | static const char PROGMEM ducky_logo[LOGO_SIZE] = { | 150 | static const char PROGMEM raw_logo[] = { |
| 138 | 0, 0, 0, 0,128,128,128,128,128, 0, 0,252,252,252, 0, 0, 0,128,128,128, 0, 0, 0, 0, 0,128,128,128, 0, 0, 0, 0, 0,128,128,128,128,128, 0, 0, 0, 0, 0,252,252,252, 0, 0, 0, 0, 0,128,128,128,128,128,128, 0, 0, 0, 0, 0, 0,128,128,128,128, 0,248,248,248, 56, 56, 56, 56, 56, 56,120,240,224,192, 0, 0,128,128,128,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128,128, 0, 0,252,252,252, 0, 0, 0, 0, 0,232, 24, 24,232, 0, 24, 48, 48, 24, 0,232, 24, 24,232, 0, 0, | 151 | 0, 0, 0, 0,128,128,128,128,128, 0, 0,252,252,252, 0, 0, 0,128,128,128, 0, 0, 0, 0, 0,128,128,128, 0, 0, 0, 0, 0,128,128,128,128,128, 0, 0, 0, 0, 0,252,252,252, 0, 0, 0, 0, 0,128,128,128,128,128,128, 0, 0, 0, 0, 0, 0,128,128,128,128, 0,248,248,248, 56, 56, 56, 56, 56, 56,120,240,224,192, 0, 0,128,128,128,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128,128, 0, 0,252,252,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 139 | 0,248,254,255,143, 7, 3, 3, 3, 7,142,255,255,255, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,255,255,255, 0,248,254,255,143, 7, 3, 3, 3, 3,143, 7, 2, 0, 0,255,255,255,240,120,252,254,231,131, 1, 0, 1, 7, 63,254,240,192, 0,224,252,127, 31, 3, 0, 0,255,255,255,112,112,112,112,112,112, 56, 63, 31, 15,193,231,243,115, 51, 51, 51, 55,255,255,252, 0, 0,248,254,255,143, 7, 3, 3, 3, 7,142,255,255,255, 0, 0, 0, 0, 0, 21,127,127,252,252,252,253,253,252,252,252,255,255,255, 0, 0, | 152 | 0,248,254,255,143, 7, 3, 3, 3, 7,142,255,255,255, 0, 0, 0,255,255,255, 0, 0, 0, 0, 0,255,255,255, 0,248,254,255,143, 7, 3, 3, 3, 3,143, 7, 2, 0, 0,255,255,255,240,120,252,254,231,131, 1, 0, 1, 7, 63,254,240,192, 0,224,252,127, 31, 3, 0, 0,255,255,255,112,112,112,112,112,112, 56, 63, 31, 15,193,231,243,115, 51, 51, 51, 55,255,255,252, 0, 0,248,254,255,143, 7, 3, 3, 3, 7,142,255,255,255, 0, 0, 0, 0,192,240,240, 96, 48, 48, 0, 12, 12,134,198,230,126, 60, 0, 0, 0, |
| 140 | 0, 0, 3, 7, 15, 15, 14, 14, 14, 7, 3, 15, 15, 15, 0, 0, 0, 3, 7, 15, 15, 14, 14, 6, 3, 15, 15, 15, 0, 0, 3, 7, 7, 15, 14, 14, 14, 14, 7, 7, 2, 0, 0, 15, 15, 15, 0, 0, 0, 1, 3, 15, 15, 12,136,224,224,224,247,127,127, 31, 3, 0, 0, 0, 0, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 14, 14, 6, 3, 15, 15, 15, 0, 0, 0, 3, 7, 15, 15, 14, 14, 14, 7, 3, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 11, 3, 11, 7, 11, 7, 7, 31, 0, 0 | 153 | 0, 0, 3, 7, 15, 15, 14, 14, 14, 7, 3, 15, 15, 15, 0, 0, 0, 3, 7, 15, 15, 14, 14, 6, 3, 15, 15, 15, 0, 0, 3, 7, 7, 15, 14, 14, 14, 14, 7, 7, 2, 0, 0, 15, 15, 15, 0, 0, 0, 1, 3, 15, 15, 12,136,224,224,224,247,127,127, 31, 3, 0, 0, 0, 0, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 14, 14, 14, 6, 3, 15, 15, 15, 0, 0, 0, 3, 7, 15, 15, 14, 14, 14, 7, 3, 15, 15, 15, 0, 0, 0, 12, 15, 7, 0, 0, 0, 12, 14, 15, 15, 13, 13, 12, 12, 0, 0, 0, 0, |
| 141 | }; | 154 | }; |
| 142 | oled_write_raw_P(ducky_logo, LOGO_SIZE); | 155 | oled_write_raw_P(raw_logo, sizeof(raw_logo)); |
| 143 | } | 156 | } |
| 144 | 157 | ||
| 145 | char* make_menu_text(void){ | 158 | char* make_menu_text(void){ |
| 146 | char *s = malloc((30 * 3) * sizeof(*s)); | 159 | char *s = malloc((30 * 4) * sizeof(*s)); |
| 147 | int width = 3; | 160 | int width = 3; |
| 148 | sprintf(s, "%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s", | 161 | snprintf(s, 120, "%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s", |
| 149 | width, MT_0_0, width, MT_0_1, width, MT_0_2, | 162 | width, MT_0_0, width, MT_0_1, width, MT_0_2, |
| 150 | width, MT_0_3, width, MT_0_4, width, MT_0_5, | 163 | width, MT_0_3, width, MT_0_4, width, MT_0_5, |
| 151 | width, MT_0_6, width, MT_0_7, width, MT_0_8, | 164 | width, MT_0_6, width, MT_0_7, width, MT_0_8, |
| @@ -156,10 +169,10 @@ char* make_menu_text(void){ | |||
| 156 | }; | 169 | }; |
| 157 | 170 | ||
| 158 | char* make_rgb_text(void){ | 171 | char* make_rgb_text(void){ |
| 159 | char *s = malloc((30 * 3) * sizeof(*s)); | 172 | char *s = malloc((30 * 4) * sizeof(*s)); |
| 160 | int width = 3; | 173 | int width = 3; |
| 161 | sprintf( | 174 | snprintf( |
| 162 | s, "%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s", | 175 | s, 120, "%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s", |
| 163 | width, MT_1_0, width, MT_1_1, width, MT_1_2, | 176 | width, MT_1_0, width, MT_1_1, width, MT_1_2, |
| 164 | width, MT_1_3, width, MT_1_4, width, MT_1_5, | 177 | width, MT_1_3, width, MT_1_4, width, MT_1_5, |
| 165 | width, MT_1_6, width, MT_1_7, width, MT_1_8, | 178 | width, MT_1_6, width, MT_1_7, width, MT_1_8, |
| @@ -170,10 +183,10 @@ char* make_rgb_text(void){ | |||
| 170 | }; | 183 | }; |
| 171 | 184 | ||
| 172 | char* make_alt_text(void){ | 185 | char* make_alt_text(void){ |
| 173 | char *s = malloc((30 * 3) * sizeof(*s)); | 186 | char *s = malloc((30 * 4) * sizeof(*s)); |
| 174 | int width = 3; | 187 | int width = 3; |
| 175 | sprintf( | 188 | snprintf( |
| 176 | s, "%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s", | 189 | s, 120, "%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s\n%-*s %-*s %-*s", |
| 177 | width, MT_2_0, width, MT_2_1, width, MT_2_2, | 190 | width, MT_2_0, width, MT_2_1, width, MT_2_2, |
| 178 | width, MT_2_3, width, MT_2_4, width, MT_2_5, | 191 | width, MT_2_3, width, MT_2_4, width, MT_2_5, |
| 179 | width, MT_2_6, width, MT_2_7, width, MT_2_8, | 192 | width, MT_2_6, width, MT_2_7, width, MT_2_8, |
| @@ -183,23 +196,87 @@ char* make_alt_text(void){ | |||
| 183 | return s; | 196 | return s; |
| 184 | }; | 197 | }; |
| 185 | 198 | ||
| 199 | char* make_sys_info_text(void) { | ||
| 200 | char *s = malloc((30 * 5) * sizeof(*s)); | ||
| 201 | snprintf(s, 150, " cpu: %.1fGHz\n mem: %d%%\n gpu: %d%%\n temp: %dC\n time: %d:%d", cpuFreq, memPerc, gpuLoad, temp, hour, minute); | ||
| 202 | return s; | ||
| 203 | }; | ||
| 204 | |||
| 205 | |||
| 186 | void oled_task_user(void) { | 206 | void oled_task_user(void) { |
| 187 | render_logo(); | 207 | if (!sysToggled) { |
| 188 | oled_set_cursor(0,3); | 208 | render_logo(); |
| 189 | if (rgbToggled) { | 209 | oled_set_cursor(0,3); |
| 190 | char *s = make_rgb_text(); | 210 | if (rgbToggled) { |
| 191 | oled_write_ln_P(s, false); | 211 | char *s = make_rgb_text(); |
| 192 | free(s); | 212 | oled_write_ln(s, false); |
| 193 | } else if (altToggled) { | 213 | free(s); |
| 194 | char *s = make_alt_text(); | 214 | } else if (altToggled) { |
| 195 | oled_write_ln_P(s, false); | 215 | char *s = make_alt_text(); |
| 196 | free(s); | 216 | oled_write_ln(s, false); |
| 197 | } else { | 217 | free(s); |
| 198 | char *s = make_menu_text(); | 218 | } else { |
| 199 | oled_write_ln_P(s, false); | 219 | char *s = make_menu_text(); |
| 200 | free(s); | 220 | oled_write_ln(s, false); |
| 221 | free(s); | ||
| 222 | } | ||
| 201 | } | 223 | } |
| 202 | } | 224 | }; |
| 225 | |||
| 226 | int concat(int a, int b) { | ||
| 227 | char s1[20]; | ||
| 228 | char s2[20]; | ||
| 229 | sprintf(s1, "%d", a); | ||
| 230 | sprintf(s2, "%d", b); | ||
| 231 | strcat(s1, s2); | ||
| 232 | int c = atoi(s1); | ||
| 233 | |||
| 234 | return c; | ||
| 235 | }; | ||
| 236 | |||
| 237 | void raw_hid_receive(uint8_t *data, uint8_t length) { | ||
| 238 | if (sysToggled) { | ||
| 239 | oled_clear(); | ||
| 240 | render_logo(); | ||
| 241 | int i; | ||
| 242 | int stepper = 0; | ||
| 243 | int toWrite; | ||
| 244 | for (i=0; i < length; i++) { | ||
| 245 | if (data[i] != 13) { | ||
| 246 | toWrite = concat(toWrite, data[i]); | ||
| 247 | } else { | ||
| 248 | switch (stepper) { | ||
| 249 | case 0: | ||
| 250 | cpuFreq = floor(100*toWrite)/10000; | ||
| 251 | break; | ||
| 252 | case 1: | ||
| 253 | memPerc = toWrite / 10; | ||
| 254 | break; | ||
| 255 | case 2: | ||
| 256 | gpuLoad = toWrite; | ||
| 257 | break; | ||
| 258 | case 3: | ||
| 259 | temp = toWrite; | ||
| 260 | break; | ||
| 261 | case 4: | ||
| 262 | hour = toWrite; | ||
| 263 | break; | ||
| 264 | case 5: | ||
| 265 | minute = toWrite; | ||
| 266 | break; | ||
| 267 | default: | ||
| 268 | break; | ||
| 269 | } | ||
| 270 | toWrite = 0; | ||
| 271 | stepper++; | ||
| 272 | } | ||
| 273 | } | ||
| 274 | oled_set_cursor(0,3); | ||
| 275 | char *s = make_sys_info_text(); | ||
| 276 | oled_write_ln(s, false); | ||
| 277 | free(s); | ||
| 278 | } | ||
| 279 | }; | ||
| 203 | 280 | ||
| 204 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 281 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
| 205 | switch (keycode) { | 282 | switch (keycode) { |
| @@ -208,10 +285,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 208 | if (rgbToggled) { | 285 | if (rgbToggled) { |
| 209 | rgbToggled = false; | 286 | rgbToggled = false; |
| 210 | altToggled = false; | 287 | altToggled = false; |
| 288 | sysToggled = false; | ||
| 289 | oled_clear(); | ||
| 211 | layer_clear(); | 290 | layer_clear(); |
| 212 | } else { | 291 | } else { |
| 213 | rgbToggled = true; | 292 | rgbToggled = true; |
| 214 | altToggled = false; | 293 | altToggled = false; |
| 294 | sysToggled = false; | ||
| 215 | layer_on(_RGB); | 295 | layer_on(_RGB); |
| 216 | } | 296 | } |
| 217 | } | 297 | } |
| @@ -221,16 +301,34 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 221 | if (altToggled) { | 301 | if (altToggled) { |
| 222 | rgbToggled = false; | 302 | rgbToggled = false; |
| 223 | altToggled = false; | 303 | altToggled = false; |
| 304 | sysToggled = false; | ||
| 305 | oled_clear(); | ||
| 224 | layer_clear(); | 306 | layer_clear(); |
| 225 | } else { | 307 | } else { |
| 226 | rgbToggled = false; | 308 | rgbToggled = false; |
| 309 | sysToggled = false; | ||
| 227 | altToggled = true; | 310 | altToggled = true; |
| 228 | layer_on(_ALT); | 311 | layer_on(_ALT); |
| 229 | } | 312 | } |
| 230 | } | 313 | } |
| 231 | return false; | 314 | return false; |
| 315 | case SYS_LAYER: | ||
| 316 | if (record->event.pressed) { | ||
| 317 | if (sysToggled) { | ||
| 318 | rgbToggled = false; | ||
| 319 | altToggled = false; | ||
| 320 | sysToggled = false; | ||
| 321 | oled_clear(); | ||
| 322 | layer_clear(); | ||
| 323 | } else { | ||
| 324 | rgbToggled = false; | ||
| 325 | sysToggled = true; | ||
| 326 | altToggled = false; | ||
| 327 | layer_on(_SYS); | ||
| 328 | } | ||
| 329 | } | ||
| 232 | default: | 330 | default: |
| 233 | return true; | 331 | return true; |
| 234 | } | 332 | } |
| 235 | return false; | 333 | return false; |
| 236 | } | 334 | }; |
