2 Copyright 2018 Cole Markham
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.
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.
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/>.
18 #include QMK_KEYBOARD_H
20 static const char * const ANSWERS[] = {
23 "It is decidedly so\n",
26 "You may rely on it\n",
31 "Signs point to yes\n",
32 // Uncertain answers, index 10
33 "Reply hazy try again\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",
41 "My sources say no\n",
42 "Outlook not so good\n",
46 #define UNCERTAIN_BREAK 10
48 #define NUM_ANSWERS 20
49 // Timeout of answer color in ms
50 #define ANSWER_TIMEOUT 3000
52 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
62 uint32_t lastTime = 0;
64 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
68 void matrix_init_user(void) {
70 dprintf("Initializing in matrix_scan_user");
77 void matrix_scan_user(void) {
78 if (lastTime > 0 && timer_elapsed32(lastTime) > ANSWER_TIMEOUT) {
84 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
87 if (record->event.pressed) {
88 uint8_t num = rand() / (RAND_MAX / NUM_ANSWERS + 1);
90 if (num < UNCERTAIN_BREAK) {
91 rgblight_setrgb_green();
92 } else if (num < NO_BREAK) {
93 rgblight_setrgb_yellow();
95 rgblight_setrgb_red();
97 send_string(ANSWERS[num]);
98 lastTime = timer_read32();
105 void led_set_user(uint8_t usb_led) {
107 if (usb_led & (1 << USB_LED_NUM_LOCK)) {
113 if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
119 if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
125 if (usb_led & (1 << USB_LED_COMPOSE)) {
131 if (usb_led & (1 << USB_LED_KANA)) {
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();