aboutsummaryrefslogtreecommitdiff
path: root/tmk_core
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-11-17 17:42:14 -0500
committerJack Humbert <jack.humb@gmail.com>2016-11-17 17:42:14 -0500
commit3774a7fcdab5544fc787f4c200be05fcd417e31f (patch)
treebb1c582d658ec7f19bce9d43f1c536b83066d40b /tmk_core
parent530dd3377e4d409a7ca2fee7e47b60b735ebc0fa (diff)
downloadqmk_firmware-3774a7fcdab5544fc787f4c200be05fcd417e31f.tar.gz
qmk_firmware-3774a7fcdab5544fc787f4c200be05fcd417e31f.zip
rgb light through midi
Diffstat (limited to 'tmk_core')
-rw-r--r--tmk_core/protocol/lufa/lufa.c96
1 files changed, 96 insertions, 0 deletions
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index b628cde37..7eb9be601 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -51,6 +51,7 @@
51 51
52#include "descriptor.h" 52#include "descriptor.h"
53#include "lufa.h" 53#include "lufa.h"
54#include "quantum.h"
54 55
55#ifdef NKRO_ENABLE 56#ifdef NKRO_ENABLE
56 #include "keycode_config.h" 57 #include "keycode_config.h"
@@ -1111,9 +1112,104 @@ void cc_callback(MidiDevice * device,
1111 #endif 1112 #endif
1112} 1113}
1113 1114
1115void send_dword(uint32_t number) {
1116 uint16_t word = (number >> 16);
1117 send_word(word);
1118 send_word(number & 0xFFFFUL);
1119}
1120
1121void send_word(uint16_t number) {
1122 uint8_t byte = number >> 8;
1123 send_byte(byte);
1124 send_byte(number & 0xFF);
1125}
1126
1127void send_byte(uint8_t number) {
1128 uint8_t nibble = number >> 4;
1129 send_nibble(nibble);
1130 send_nibble(number & 0xF);
1131}
1132
1133void send_nibble(uint8_t number) {
1134 switch (number) {
1135 case 0:
1136 register_code(KC_0);
1137 unregister_code(KC_0);
1138 break;
1139 case 1 ... 9:
1140 register_code(KC_1 + (number - 1));
1141 unregister_code(KC_1 + (number - 1));
1142 break;
1143 case 0xA ... 0xF:
1144 register_code(KC_A + (number - 0xA));
1145 unregister_code(KC_A + (number - 0xA));
1146 break;
1147 }
1148}
1149
1150uint8_t midi_buffer[16] = {0};
1151
1114void sysex_callback(MidiDevice * device, 1152void sysex_callback(MidiDevice * device,
1115 uint16_t start, uint8_t length, uint8_t * data) { 1153 uint16_t start, uint8_t length, uint8_t * data) {
1116 // for (int i = 0; i < length; i++) 1154 // for (int i = 0; i < length; i++)
1117 // midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i)); 1155 // midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i));
1156 // if (start == 0x27) {
1157 // SEND_STRING("\n");
1158 // send_word(start);
1159 // SEND_STRING(": ");
1160 for (uint8_t place = 0; place < length; place++) {
1161 // send_byte(*data);
1162 midi_buffer[start + place] = *data;
1163 if (*data == 0xF7)
1164 sysex_buffer_callback(start + place, &midi_buffer);
1165 // SEND_STRING(" ");
1166 data++;
1167 }
1168 // }
1169
1170}
1171
1172void sysex_buffer_callback(uint8_t length, uint8_t * data) {
1173 uint8_t * pointer_copy = data;
1174
1175 if (*data++ != 0xF0)
1176 return
1177 data++;
1178 data++;
1179 data++;
1180 data++;
1181
1182 switch (*data++) {
1183 case 0x27: ; // RGB LED functions
1184 switch (*data++)
1185 case 0x00: ; // Update HSV
1186 uint32_t part1 = *data++;
1187 uint32_t part2 = *data++;
1188 uint32_t part3 = *data++;
1189 uint32_t part4 = *data++;
1190 uint32_t part5 = *data++;
1191 uint32_t chunk = ((part1 & 0x1FUL) << 28) | (part2 << 21) | (part3 << 14) | (part4 << 7) | part5;
1192 // SEND_STRING("\nCHUNK: ");
1193 // send_dword(chunk);
1194 rgblight_sethsv(((chunk >> 16) & 0xFFFF) % 360, (chunk >> 8) & 0xFF, chunk & 0xFF);
1195 // SEND_STRING("\nHUE: ");
1196 // send_word(((chunk >> 16) & 0xFFFF) % 360);
1197 // SEND_STRING("\nSAT: ");
1198 // send_word((chunk >> 8) & 0xFF);
1199 // SEND_STRING("\nVAL: ");
1200 // send_word(chunk & 0xFF);
1201 break;
1202 case 0x01: ; // Update RGB
1203 break;
1204 break;
1205 }
1206
1207 // SEND_STRING("\nDATA:\n");
1208 // while (*pointer_copy != 0xF7) {
1209 // send_byte(*pointer_copy++);
1210 // SEND_STRING(" ");
1211 // }
1212
1118} 1213}
1214
1119#endif 1215#endif