]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/bigseries/keymaps/8ball/keymap.c
a failed attempt at hot-plugging
[qmk_firmware.git] / keyboards / bigseries / keymaps / 8ball / keymap.c
1 /*
2 Copyright 2018 Cole Markham
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include "../../bigseries.h"
19
20 static const char * const ANSWERS[] = {
21 // "Yes" answers
22 "It is certain\n",
23 "It is decidedly so\n",
24 "Without a doubt\n",
25 "Yes definitely\n",
26 "You may rely on it\n",
27 "As I see it, yes\n",
28 "Most likely\n",
29 "Outlook good\n",
30 "Yes\n",
31 "Signs point to yes\n",
32 // Uncertain answers, index 10
33 "Reply hazy try again\n",
34 "Ask again later\n",
35 "Better not tell you now\n",
36 "Cannot predict now\n",
37 "Concentrate and ask again\n",
38 // "No" answers, index 15
39 "Don't count on it\n",
40 "My reply is no\n",
41 "My sources say no\n",
42 "Outlook not so good\n",
43 "Very doubtful\n"
44 };
45
46 #define UNCERTAIN_BREAK 10
47 #define NO_BREAK 15
48 #define NUM_ANSWERS 20
49 // Timeout of answer color in ms
50 #define ANSWER_TIMEOUT 3000
51
52 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
53
54 KEYMAP(
55     KC_A),
56 };
57
58
59 void reset_rgb(void);
60
61 bool initialized = 0;
62 uint32_t lastTime = 0;
63
64 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
65   return MACRO_NONE ;
66 }
67
68 void matrix_init_user(void) {
69   if (!initialized){
70       dprintf("Initializing in matrix_scan_user");
71       rgblight_enable();
72       reset_rgb();
73       initialized = 1;
74     }
75 }
76
77 void matrix_scan_user(void) {
78   if (lastTime > 0 && timer_elapsed32(lastTime) > ANSWER_TIMEOUT) {
79     lastTime = 0;
80     reset_rgb();
81   }
82 }
83
84 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
85   switch (keycode) {
86   case KC_A:
87     if (record->event.pressed) {
88       uint8_t num = rand() / (RAND_MAX / NUM_ANSWERS + 1);
89       rgblight_mode(1);
90       if (num < UNCERTAIN_BREAK) {
91         rgblight_setrgb_green();
92       } else if (num < NO_BREAK) {
93         rgblight_setrgb_yellow();
94       } else {
95         rgblight_setrgb_red();
96       }
97       send_string(ANSWERS[num]);
98       lastTime = timer_read32();
99       return false;
100     }
101   }
102   return true;
103 }
104
105 void led_set_user(uint8_t usb_led) {
106
107   if (usb_led & (1 << USB_LED_NUM_LOCK)) {
108
109   } else {
110
111   }
112
113   if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
114
115   } else {
116
117   }
118
119   if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
120
121   } else {
122
123   }
124
125   if (usb_led & (1 << USB_LED_COMPOSE)) {
126
127   } else {
128
129   }
130
131   if (usb_led & (1 << USB_LED_KANA)) {
132
133   } else {
134
135   }
136
137 }
138
139 void reset_rgb(void) {
140   // This gets called on init and after the timeout for the answer color
141   // If you want to change the default color/mode, do it here
142   rgblight_sethsv_blue();
143   rgblight_mode(7);
144 }