diff options
| -rwxr-xr-x | keyboards/bigseries/keymaps/8ball/keymap.c | 144 |
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 | /* | ||
| 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 | } | ||
