qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

keymap.c (2575B)


      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 QMK_KEYBOARD_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 LAYOUT(
     55     KC_A),
     56 };
     57 
     58 
     59 void reset_rgb(void);
     60 
     61 bool initialized = 0;
     62 uint32_t lastTime = 0;
     63 
     64 void matrix_init_user(void) {
     65   if (!initialized){
     66       dprintf("Initializing in matrix_scan_user");
     67       rgblight_enable();
     68       reset_rgb();
     69       initialized = 1;
     70     }
     71 }
     72 
     73 void matrix_scan_user(void) {
     74   if (lastTime > 0 && timer_elapsed32(lastTime) > ANSWER_TIMEOUT) {
     75     lastTime = 0;
     76     reset_rgb();
     77   }
     78 }
     79 
     80 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     81   switch (keycode) {
     82   case KC_A:
     83     if (record->event.pressed) {
     84       uint8_t num = rand() / (RAND_MAX / NUM_ANSWERS + 1);
     85       rgblight_mode(1);
     86       if (num < UNCERTAIN_BREAK) {
     87         rgblight_setrgb(RGB_GREEN);
     88       } else if (num < NO_BREAK) {
     89         rgblight_setrgb(RGB_YELLOW);
     90       } else {
     91         rgblight_setrgb(RGB_RED);
     92       }
     93       send_string(ANSWERS[num]);
     94       lastTime = timer_read32();
     95       return false;
     96     }
     97   }
     98   return true;
     99 }
    100 
    101 void reset_rgb(void) {
    102   // This gets called on init and after the timeout for the answer color
    103   // If you want to change the default color/mode, do it here
    104   rgblight_sethsv(HSV_BLUE);
    105   rgblight_mode(7);
    106 }