]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
rgb light through midi
authorJack Humbert <jack.humb@gmail.com>
Thu, 17 Nov 2016 22:42:14 +0000 (17:42 -0500)
committerJack Humbert <jack.humb@gmail.com>
Thu, 17 Nov 2016 22:42:14 +0000 (17:42 -0500)
26 files changed:
keyboards/amj60/config.h
keyboards/clueboard/rev1/config.h
keyboards/clueboard/rev2/config.h
keyboards/cluecard/config.h
keyboards/cluecard/keymaps/rgb_effects/config.h
keyboards/cluepad/config.h
keyboards/ergodox/keymaps/jack/config.h
keyboards/gh60/keymaps/robotmaxtron/config.h
keyboards/handwired/minorca/keymaps/rgb/config.h
keyboards/jd40/config.h
keyboards/kc60/keymaps/ws2812/config.h
keyboards/lets_split/config.h
keyboards/lets_split/keymaps/i2c/config.h
keyboards/lets_split/keymaps/serial/config.h
keyboards/phantom/config.h
keyboards/planck/keymaps/experimental/config.h
keyboards/planck/keymaps/yang/config.h
keyboards/preonic/config.h
keyboards/preonic/keymaps/kinesis/config.h
keyboards/satan/config.h
keyboards/tada68/config.h
quantum/light_ws2812.c
quantum/rgblight.c
quantum/rgblight.h
readme.md
tmk_core/protocol/lufa/lufa.c

index d98e0e9f2f867c5572c5ef8261e3225b8fa59323..7c06f9a6c79ee63cb381d9084e425d7e18db5895 100644 (file)
@@ -67,7 +67,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 8c949723247bf654dcab4e521ab989aa5f40fa5a..f40876ffbf7762482e72759ac0ffad41be927281 100644 (file)
@@ -26,7 +26,7 @@
 /* Underlight configuration
  */
 #define RGB_DI_PIN B2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 14     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 15ca4ece86afaca045d26bb75b5354daec026251..8435fd02be748a5d74a9688f1570ce1b26b1ada1 100644 (file)
@@ -30,7 +30,7 @@
 /* Underlight configuration
  */
 #define RGB_DI_PIN D7
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 14     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 765347b131926b84652e8e8067571a1a7a787a07..6520eb5574a7b0976f6f320ca1519b91ac167f2b 100644 (file)
@@ -140,7 +140,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* Underlight configuration
  */
 #define RGB_DI_PIN E6
-//#define RGBLIGHT_TIMER
+//#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 4     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index e88847df4d30b5d31a4058dd0beeaaac547565e0..c6c9342c8188779d295e24d5b225e89df3608171 100644 (file)
@@ -4,7 +4,7 @@
 #include "../../config.h"
 
 // place overrides here
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
 #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
 #define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2
index bae05fade38ae99b8ee11c7c2d1fb8b96b9ac5bb..bd64dfd27d9aaa3778e9621f5484622c751a7c18 100644 (file)
@@ -70,7 +70,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* Underlight configuration
  */
 #define RGB_DI_PIN F6
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 4     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 5bf109c1840d0d21bb5c5aefb2f9dc1261659b59..5c11652264a9dace4bd05bdf423c86fb2e5fd1ea 100644 (file)
@@ -5,12 +5,13 @@
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D7
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 15     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 12
 #define RGBLIGHT_SAT_STEP 255
 #define RGBLIGHT_VAL_STEP 12
 
 #define RGB_MIDI
+#define RGBW_BB_TWI
 
 #endif
\ No newline at end of file
index 6a29e6b8c264dfd7d623567eafeaea96592c329a..bcd7534617c28e7da0514b33129eb63ca6637653 100644 (file)
@@ -182,7 +182,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 #define ws2812_pin PF4
 */ 
 #define RGB_DI_PIN F4
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8         // Number of LEDs
 #define RGBLIGHT_HUE_STEP 8
 #define RGBLIGHT_SAT_STEP 8
index deaac2e26faaedef549654396764161053349581..43b3c59110defe9aaba6d5042f7ff217cfa25c07 100644 (file)
@@ -11,7 +11,7 @@
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D5
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 13     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index e2594f4b372e4b1b2202339496a72175e4d61d74..047be5707b0fc7d728d3a3a463f40a0dbb0c5e98 100644 (file)
@@ -70,7 +70,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 )
 
 #define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 12         // Number of LEDs
 #define RGBLIGHT_HUE_STEP 8
 #define RGBLIGHT_SAT_STEP 8
index 2f39ea8e55ecb607d2c7dc24ec1099a25986fad0..43abf6228effe0de1cb093711fd465b745e95e76 100644 (file)
@@ -2,7 +2,7 @@
 
 /* WS2812B RGB Underglow LED */
 #define RGB_DI_PIN F5   // Based on wiring depicted in ws2812_wiring.jpg
-#define RGBLIGHT_TIMER       
+#define RGBLIGHT_ANIMATIONS       
 #define RGBLED_NUM 16         // Number of LEDs. Change this to match your use case.
 #define RGBLIGHT_HUE_STEP 8
 #define RGBLIGHT_SAT_STEP 8
index f4d900accbe410f98c13b00bba935d4577344bcc..b0ad522fcbae965959c05a3e9f10455ea49c7f9c 100644 (file)
@@ -75,7 +75,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D4
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 2671fabf6d44af31f06f9e24ffbcd6e485ba286a..72e5ae66bab60f77a0e70b39328dfebee6e2af9a 100644 (file)
@@ -75,7 +75,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D4
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index f4d900accbe410f98c13b00bba935d4577344bcc..b0ad522fcbae965959c05a3e9f10455ea49c7f9c 100644 (file)
@@ -75,7 +75,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D4
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 983a1d73f29868ac4c7a10e74559f7067b5fe068..71a33498b4fd9550216d247c4eea47b3657aa7e7 100644 (file)
@@ -63,7 +63,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* Underlight configuration
  */
 #define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 20     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 52acd1905ebebcdc69822434889b0935565096d5..cc093bee493cce874ea526978c57ff116ec20b08 100644 (file)
@@ -9,7 +9,7 @@
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN B1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index feb5a11901393757eca9df17e4501041e063116c..4ed19d76f901f3caa43bc485cec4f998e84c637b 100644 (file)
@@ -5,7 +5,7 @@
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 28     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 3fb978c2f6bafe89b7b2262534004c804c802434..f88acf211109e0293a3a79f4da6803056cfc3f7e 100644 (file)
@@ -63,7 +63,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 28     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 086baa84ff8833fe7cfb9073554134fb29ee6475..e6099ceb82c1d7618349951e4abd4b847a98234a 100644 (file)
@@ -63,7 +63,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 28     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 7e9f91cc829c40a9267c1f8b3dc390b52d115ed7..eb357b39e07c9b11ae00f7c035158e143e0520e3 100644 (file)
@@ -67,7 +67,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 5d8757936ddd7508bdae4aeb14f4bfa4d0fe5191..19cf9c9b39882f86bad6fd23a2ff5a6aee1f0aa2 100644 (file)
@@ -67,7 +67,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /*#define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 2     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index aac058f53438bb9a0f2da5a703e11ae82a55fa79..a883b1388487130f5c783bd6b1f5df603718000b 100755 (executable)
@@ -16,8 +16,6 @@
 #include <util/delay.h>
 #include "debug.h"
 
-#define RGBW_BB_TWI 1
-
 #ifdef RGBW_BB_TWI
 
 // Port for the I2C
index 1901010bf96ab4d5b0c67b6a17f07119afc4afa7..6b58f665471634443712c54d3d7bd5512a47ac7e 100644 (file)
@@ -174,7 +174,7 @@ void rgblight_init(void) {
   }
   eeconfig_debug_rgblight(); // display current eeprom values
 
-  #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+  #ifdef RGBLIGHT_ANIMATIONS
     rgblight_timer_init(); // setup the timer
   #endif
 
@@ -221,7 +221,7 @@ void rgblight_mode(uint8_t mode) {
   eeconfig_update_rgblight(rgblight_config.raw);
   xprintf("rgblight mode: %u\n", rgblight_config.mode);
   if (rgblight_config.mode == 1) {
-    #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+    #ifdef RGBLIGHT_ANIMATIONS
       rgblight_timer_disable();
     #endif
   } else if (rgblight_config.mode >= 2 && rgblight_config.mode <= 23) {
@@ -231,7 +231,7 @@ void rgblight_mode(uint8_t mode) {
     // MODE 15-20, snake
     // MODE 21-23, knight
 
-    #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+    #ifdef RGBLIGHT_ANIMATIONS
       rgblight_timer_enable();
     #endif
   }
@@ -245,7 +245,7 @@ void rgblight_toggle(void) {
   if (rgblight_config.enable) {
     rgblight_mode(rgblight_config.mode);
   } else {
-    #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+    #ifdef RGBLIGHT_ANIMATIONS
       rgblight_timer_disable();
     #endif
     _delay_ms(50);
@@ -371,7 +371,7 @@ void rgblight_set(void) {
   }
 }
 
-#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+#ifdef RGBLIGHT_ANIMATIONS
 
 // Animation timer -- AVR Timer3
 void rgblight_timer_init(void) {
index d16ba24e53627ad74177607aaa157c60c5c4a76d..330c2fe1ba1a6cd69c0aa9c4ec81b241ffb77bd4 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef RGBLIGHT_H
 #define RGBLIGHT_H
 
-#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+#ifdef RGBLIGHT_ANIMATIONS
        #define RGBLIGHT_MODES 23
 #else
        #define RGBLIGHT_MODES 1
index d5a259ccb861fa65bf2cf6e412482f937f229377..2364b53010d23398d6c78dae4bc47e12580feed2 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -1135,12 +1135,12 @@ For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring
 
     RGBLIGHT_ENABLE = yes
 
-In order to use the underglow timer functions, you need to have `#define RGBLIGHT_TIMER` in your `config.h`, and have audio disabled (`AUDIO_ENABLE = no` in your Makefile).
+In order to use the underglow animation functions, you need to have `#define RGBLIGHT_ANIMATIONS` in your `config.h`.
 
 Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default:
 
     #define RGB_DI_PIN F4     // The pin your RGB strip is wired to
-    #define RGBLIGHT_TIMER    // Require for fancier stuff (not compatible with audio)
+    #define RGBLIGHT_ANIMATIONS    // Require for fancier stuff (not compatible with audio)
     #define RGBLED_NUM 14     // Number of LEDs
     #define RGBLIGHT_HUE_STEP 10
     #define RGBLIGHT_SAT_STEP 17
index b628cde370ae3de6b4c34161df5cafe0d1a323f8..7eb9be601e31da467e3c7994d8e7539b715ae61a 100644 (file)
@@ -51,6 +51,7 @@
 
 #include "descriptor.h"
 #include "lufa.h"
+#include "quantum.h"
 
 #ifdef NKRO_ENABLE
   #include "keycode_config.h"
@@ -1111,9 +1112,104 @@ void cc_callback(MidiDevice * device,
     #endif
 }
 
+void send_dword(uint32_t number) {
+    uint16_t word = (number >> 16);
+    send_word(word);
+    send_word(number & 0xFFFFUL);
+}
+
+void send_word(uint16_t number) {
+    uint8_t byte = number >> 8;
+    send_byte(byte);
+    send_byte(number & 0xFF);
+}
+
+void send_byte(uint8_t number) {
+    uint8_t nibble = number >> 4;
+    send_nibble(nibble);
+    send_nibble(number & 0xF);
+}
+
+void send_nibble(uint8_t number) {
+    switch (number) {
+        case 0:
+            register_code(KC_0);
+            unregister_code(KC_0);
+            break;
+        case 1 ... 9:
+            register_code(KC_1 + (number - 1));
+            unregister_code(KC_1 + (number - 1));
+            break;
+        case 0xA ... 0xF:
+            register_code(KC_A + (number - 0xA));
+            unregister_code(KC_A + (number - 0xA));
+            break;
+    }
+}
+
+uint8_t midi_buffer[16] = {0};
+
 void sysex_callback(MidiDevice * device,
     uint16_t start, uint8_t length, uint8_t * data) {
   // for (int i = 0; i < length; i++)
   //   midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i));
+    // if (start == 0x27) {
+        // SEND_STRING("\n");
+        // send_word(start);
+        // SEND_STRING(": ");
+        for (uint8_t place = 0; place < length; place++) {
+            // send_byte(*data);
+            midi_buffer[start + place] = *data;
+            if (*data == 0xF7)
+                sysex_buffer_callback(start + place, &midi_buffer);
+            // SEND_STRING(" ");
+            data++;
+        }
+    // }
+
+}
+
+void sysex_buffer_callback(uint8_t length, uint8_t * data) {
+    uint8_t * pointer_copy = data;
+
+    if (*data++ != 0xF0)
+        return
+    data++;
+    data++;
+    data++;
+    data++;
+
+    switch (*data++) {
+        case 0x27: ; // RGB LED functions
+            switch (*data++)
+                case 0x00: ; // Update HSV
+                    uint32_t part1 = *data++;
+                    uint32_t part2 = *data++;
+                    uint32_t part3 = *data++;
+                    uint32_t part4 = *data++;
+                    uint32_t part5 = *data++;
+                    uint32_t chunk = ((part1 & 0x1FUL) << 28) | (part2 << 21) | (part3 << 14) | (part4 << 7) | part5;
+                    // SEND_STRING("\nCHUNK: ");
+                    // send_dword(chunk);
+                    rgblight_sethsv(((chunk >> 16) & 0xFFFF) % 360, (chunk >> 8) & 0xFF, chunk & 0xFF);
+                    // SEND_STRING("\nHUE: ");
+                    // send_word(((chunk >> 16) & 0xFFFF) % 360);
+                    // SEND_STRING("\nSAT: ");
+                    // send_word((chunk >> 8) & 0xFF);
+                    // SEND_STRING("\nVAL: ");
+                    // send_word(chunk & 0xFF);
+                    break;
+                case 0x01: ; // Update RGB
+                    break;
+            break;
+    }
+
+    // SEND_STRING("\nDATA:\n");
+    // while (*pointer_copy != 0xF7) {
+    //     send_byte(*pointer_copy++);
+    //     SEND_STRING(" ");
+    // }
+
 }
+
 #endif