aboutsummaryrefslogtreecommitdiff
path: root/keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c')
-rw-r--r--keyboards/dekunukem/duckypad/keymaps/m4cs/keymap.c186
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
29bool rgbToggled = false; 31bool rgbToggled = false;
30bool altToggled = false; 32bool altToggled = false;
33bool sysToggled = false;
31 34
32enum layer_codes { 35enum 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
37enum 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
67float cpuFreq = 0;
68int memPerc = 0;
69int gpuLoad = 0;
70int temp = 0;
71int hour = 0;
72int minute = 0;
68 73
69 74
70const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 75const 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
136static void render_logo(void) { 149static 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
145char* make_menu_text(void){ 158char* 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
158char* make_rgb_text(void){ 171char* 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
172char* make_alt_text(void){ 185char* 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
199char* 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
186void oled_task_user(void) { 206void 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
226int 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
237void 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
204bool process_record_user(uint16_t keycode, keyrecord_t *record) { 281bool 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};