diff --git a/doc/plugin/LEDEffect-BootAnimation.md b/doc/plugin/LEDEffect-BootAnimation.md new file mode 100644 index 00000000..213cfd51 --- /dev/null +++ b/doc/plugin/LEDEffect-BootAnimation.md @@ -0,0 +1,45 @@ +# Kaleidoscope-LEDEffect-BootAnimation + +With this plugin enabled, the keyboard will play a little boot animation when +starting up (this animation does not inhibit typing, you can still use the +keyboard while the animation plays). + +## Using the plugin + +To use the plugin, include the header, and tell `Kaleidoscope` to use the plugin: + +```c++ +#include +#include +#include + +KALEIDOSCOPE_INIT_PLUGINS(LEDControl, + BootAnimationEffect + LEDOff); + +void setup() { + Kaleidoscope.setup(); +} +``` + +## Plugin properties + +The plugin provides the `BootAnimationEffect` object, with the following +properties: + +### `.timeout` + +> This property specifies the timeout (in milliseconds) each step of the +> animation is displayed. +> +> Defaults to `1000` ms, or one second. + +### `.color` + +> This property sets the color the animation is played with. +> +> The default is a red color. + +## Dependencies + +* [Kaleidoscope-LEDControl](LEDControl.md) diff --git a/src/kaleidoscope/plugin/LEDControl/BootAnimation.h b/src/Kaleidoscope-LEDEffect-BootAnimation.h similarity index 76% rename from src/kaleidoscope/plugin/LEDControl/BootAnimation.h rename to src/Kaleidoscope-LEDEffect-BootAnimation.h index 5da98af2..3bd37e82 100644 --- a/src/kaleidoscope/plugin/LEDControl/BootAnimation.h +++ b/src/Kaleidoscope-LEDEffect-BootAnimation.h @@ -1,5 +1,6 @@ -/* Kaleidoscope-LEDControl - LED control plugin for Kaleidoscope - * Copyright (C) 2017-2018 Keyboard.io, Inc. +/* -*- mode: c++ -*- + * Kaleidoscope-LEDEffect-BootAnimation -- Small greeting at boot time + * Copyright (C) 2018 Keyboard.io, Inc * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software @@ -16,4 +17,4 @@ #pragma once -void bootAnimation(void); +#include "kaleidoscope/plugin/LEDEffect-BootAnimation.h" diff --git a/src/kaleidoscope/hardware/Model01.h b/src/kaleidoscope/hardware/Model01.h index 52fd5ec8..8d52010e 100644 --- a/src/kaleidoscope/hardware/Model01.h +++ b/src/kaleidoscope/hardware/Model01.h @@ -219,72 +219,6 @@ constexpr byte R3C15 = keyIndex(3, 15); #define LED_COUNT 64 - -#define LED_PGDN 0 -#define LED_PGUP 1 -#define LED_BACKTICK 2 -#define LED_PROG 3 -#define LED_1 4 -#define LED_Q 5 -#define LED_A 6 -#define LED_Z 7 -#define LED_X 8 -#define LED_S 9 -#define LED_W 10 -#define LED_2 11 -#define LED_3 12 -#define LED_E 13 -#define LED_D 14 -#define LED_C 15 -#define LED_V 16 -#define LED_F 17 -#define LED_R 18 -#define LED_4 19 -#define LED_5 20 -#define LED_T 21 -#define LED_G 22 -#define LED_B 23 -#define LED_ESC 24 -#define LED_TAB 25 -#define LED_LED 26 -#define LED_L_CTRL 27 -#define LED_BKSP 28 -#define LED_CMD 29 -#define LED_L_SHIFT 30 -#define LED_L_FN 31 -#define LED_R_FN 32 -#define LED_R_SHIFT 33 -#define LED_ALT 34 -#define LED_SPACE 35 -#define LED_R_CTRL 36 -#define LED_ANY 37 -#define LED_RETURN 38 -#define LED_BUTTERFLY 39 -#define LED_N 40 -#define LED_H 41 -#define LED_Y 42 -#define LED_6 43 -#define LED_7 44 -#define LED_U 45 -#define LED_J 46 -#define LED_M 47 -#define LED_COMMA 48 -#define LED_K 49 -#define LED_I 50 -#define LED_8 51 -#define LED_9 52 -#define LED_O 53 -#define LED_L 54 -#define LED_PERIOD 55 -#define LED_SLASH 56 -#define LED_SEMICOLON 57 -#define LED_P 58 -#define LED_0 59 -#define LED_NUM 60 -#define LED_EQUALS 61 -#define LED_APOSTROPHE 62 -#define LED_MINUS 63 - #endif /* DOXYGEN_SHOULD_SKIP_THIS */ diff --git a/src/kaleidoscope/plugin/LEDControl/BootAnimation.cpp b/src/kaleidoscope/plugin/LEDControl/BootAnimation.cpp deleted file mode 100644 index 2e7c0ba7..00000000 --- a/src/kaleidoscope/plugin/LEDControl/BootAnimation.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* Kaleidoscope-LEDControl - LED control plugin for Kaleidoscope - * Copyright (C) 2017-2018 Keyboard.io, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - */ - -#include "kaleidoscope/plugin/LEDControl/BootAnimation.h" -#include "Kaleidoscope-LEDControl.h" - -#ifdef ARDUINO_AVR_MODEL01 -static void -type_letter(uint8_t letter) { - LEDControl.setCrgbAt(letter, {255, 0, 0}); - LEDControl.syncLeds(); - delay(250); - LEDControl.setCrgbAt(letter, {0, 0, 0}); - LEDControl.syncLeds(); - delay(10); -} -#endif - -void -bootAnimation(void) { -#ifdef ARDUINO_AVR_MODEL01 - LEDControl.set_all_leds_to(0, 0, 0); - type_letter(LED_K); - type_letter(LED_E); - type_letter(LED_Y); - type_letter(LED_B); - type_letter(LED_O); - type_letter(LED_A); - type_letter(LED_R); - type_letter(LED_D); - type_letter(LED_I); - type_letter(LED_O); - type_letter(LED_SPACE); - type_letter(LED_0); - type_letter(LED_PERIOD); - type_letter(LED_9); -#endif -} diff --git a/src/kaleidoscope/plugin/LEDEffect-BootAnimation.cpp b/src/kaleidoscope/plugin/LEDEffect-BootAnimation.cpp new file mode 100644 index 00000000..e0ce70f5 --- /dev/null +++ b/src/kaleidoscope/plugin/LEDEffect-BootAnimation.cpp @@ -0,0 +1,91 @@ +/* -*- mode: c++ -*- + * Kaleidoscope-LEDEffect-BootAnimation -- Small greeting at boot time + * Copyright (C) 2018 Keyboard.io, Inc + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include "Kaleidoscope-LEDEffect-BootAnimation.h" + +namespace kaleidoscope { +namespace plugin { + +bool BootAnimationEffect::done_ = false; +cRGB BootAnimationEffect::color = CRGB(150, 0, 0); +uint16_t BootAnimationEffect::start_time_ = 0; +uint16_t BootAnimationEffect::timeout = 1000; +uint8_t BootAnimationEffect::current_index_ = 0; +const uint8_t BootAnimationEffect::greeting_[11] PROGMEM = { + Key_K.keyCode, + Key_E.keyCode, + Key_Y.keyCode, + Key_B.keyCode, + Key_O.keyCode, + Key_A.keyCode, + Key_R.keyCode, + Key_D.keyCode, + Key_Period.keyCode, + Key_I.keyCode, + Key_O.keyCode +}; + +EventHandlerResult BootAnimationEffect::onSetup() { + start_time_ = Kaleidoscope.millisAtCycleStart(); + return EventHandlerResult::OK; +} + +EventHandlerResult BootAnimationEffect::afterEachCycle() { + //If already done or we're not in a ready state, bail + if (done_) { + return EventHandlerResult::OK; + } + + byte row = 255, col = 255; + + for (uint8_t r = 0; r < ROWS; r++) { + for (uint8_t c = 0; c < COLS; c++) { + Key k = Layer.lookupOnActiveLayer(r, c); + Key g; + g.flags = 0; + g.keyCode = pgm_read_word(&greeting_[current_index_]); + + if (k.raw == g.raw) { + row = r; + col = c; + break; + } + } + } + + if ((Kaleidoscope.millisAtCycleStart() - start_time_) > timeout) { + current_index_++; + if (current_index_ == sizeof(greeting_)) + done_ = true; + + start_time_ = Kaleidoscope.millisAtCycleStart(); + if (row != 255 && col != 255) + ::LEDControl.refreshAt(row, col); + return EventHandlerResult::OK; + } + + if (row != 255 && col != 255) { + ::LEDControl.setCrgbAt(row, col, color); + } + + return EventHandlerResult::OK; +} + +} +} + +kaleidoscope::plugin::BootAnimationEffect BootAnimationEffect; diff --git a/src/kaleidoscope/plugin/LEDEffect-BootAnimation.h b/src/kaleidoscope/plugin/LEDEffect-BootAnimation.h new file mode 100644 index 00000000..2081ffa1 --- /dev/null +++ b/src/kaleidoscope/plugin/LEDEffect-BootAnimation.h @@ -0,0 +1,45 @@ +/* -*- mode: c++ -*- + * Kaleidoscope-LEDEffect-BootAnimation -- Small greeting at boot time + * Copyright (C) 2018 Keyboard.io, Inc + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#pragma once + +#include "Kaleidoscope.h" +#include "Kaleidoscope-LEDControl.h" + +namespace kaleidoscope { +namespace plugin { +class BootAnimationEffect : public kaleidoscope::Plugin { + public: + BootAnimationEffect(void) {} + + static uint16_t timeout; + static cRGB color; + + EventHandlerResult afterEachCycle(); + EventHandlerResult onSetup(); + + private: + static const uint8_t greeting_[11]; + + static bool done_; + static uint16_t start_time_; + static uint8_t current_index_; +}; +} +} + +extern kaleidoscope::plugin::BootAnimationEffect BootAnimationEffect;