aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xkeyboards/bigseries/keymaps/8ball/keymap.c144
1 files changed, 144 insertions, 0 deletions
diff --git a/keyboards/bigseries/keymaps/8ball/keymap.c b/keyboards/bigseries/keymaps/8ball/keymap.c
new file mode 100755
index 000000000..df4e3dde8
--- /dev/null
+++ b/keyboards/bigseries/keymaps/8ball/keymap.c
@@ -0,0 +1,144 @@
1/*
2Copyright 2018 Cole Markham
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#include "../../bigseries.h"
19
20static 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
52const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
53
54KEYMAP(
55 KC_A),
56};
57
58
59void reset_rgb(void);
60
61bool initialized = 0;
62uint32_t lastTime = 0;
63
64const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
65 return MACRO_NONE ;
66}
67
68void 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
77void matrix_scan_user(void) {
78 if (lastTime > 0 && timer_elapsed32(lastTime) > ANSWER_TIMEOUT) {
79 lastTime = 0;
80 reset_rgb();
81 }
82}
83
84bool 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
105void 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
139void 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}