aboutsummaryrefslogtreecommitdiff
path: root/tmk_core
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core')
-rw-r--r--tmk_core/common/keycode.h2
-rw-r--r--tmk_core/protocol/lufa/descriptor.c6
-rw-r--r--tmk_core/protocol/lufa/lufa.c34
-rw-r--r--tmk_core/protocol/lufa/lufa.h4
4 files changed, 30 insertions, 16 deletions
diff --git a/tmk_core/common/keycode.h b/tmk_core/common/keycode.h
index 2f208c54e..54e9c322c 100644
--- a/tmk_core/common/keycode.h
+++ b/tmk_core/common/keycode.h
@@ -85,7 +85,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
85#define KC_LCAP KC_LOCKING_CAPS 85#define KC_LCAP KC_LOCKING_CAPS
86#define KC_LNUM KC_LOCKING_NUM 86#define KC_LNUM KC_LOCKING_NUM
87#define KC_LSCR KC_LOCKING_SCROLL 87#define KC_LSCR KC_LOCKING_SCROLL
88#define KC_ERAS KC_ALT_ERASE, 88#define KC_ERAS KC_ALT_ERASE
89#define KC_CLR KC_CLEAR 89#define KC_CLR KC_CLEAR
90/* Japanese specific */ 90/* Japanese specific */
91#define KC_ZKHK KC_GRAVE 91#define KC_ZKHK KC_GRAVE
diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c
index 14d99b50b..feeea76df 100644
--- a/tmk_core/protocol/lufa/descriptor.c
+++ b/tmk_core/protocol/lufa/descriptor.c
@@ -143,10 +143,10 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =
143 HID_RI_USAGE(8, 0x80), /* System Control */ 143 HID_RI_USAGE(8, 0x80), /* System Control */
144 HID_RI_COLLECTION(8, 0x01), /* Application */ 144 HID_RI_COLLECTION(8, 0x01), /* Application */
145 HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM), 145 HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),
146 HID_RI_LOGICAL_MINIMUM(16, 0x0081), 146 HID_RI_LOGICAL_MINIMUM(16, 0x0001),
147 HID_RI_LOGICAL_MAXIMUM(16, 0x00B7), 147 HID_RI_LOGICAL_MAXIMUM(16, 0x0003),
148 HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */ 148 HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */
149 HID_RI_USAGE_MAXIMUM(16, 0x00B7), /* System Display LCD Autoscale */ 149 HID_RI_USAGE_MAXIMUM(16, 0x0083), /* System Wake Up */
150 HID_RI_REPORT_SIZE(8, 16), 150 HID_RI_REPORT_SIZE(8, 16),
151 HID_RI_REPORT_COUNT(8, 1), 151 HID_RI_REPORT_COUNT(8, 1),
152 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), 152 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index dd78fe621..6dd5959dc 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -732,7 +732,7 @@ static void send_system(uint16_t data)
732 732
733 report_extra_t r = { 733 report_extra_t r = {
734 .report_id = REPORT_ID_SYSTEM, 734 .report_id = REPORT_ID_SYSTEM,
735 .usage = data 735 .usage = data - SYSTEM_POWER_DOWN + 1
736 }; 736 };
737 Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM); 737 Endpoint_SelectEndpoint(EXTRAKEY_IN_EPNUM);
738 738
@@ -1252,28 +1252,40 @@ void cc_callback(MidiDevice * device,
1252 // midi_send_cc(device, (chan + 1) % 16, num, val); 1252 // midi_send_cc(device, (chan + 1) % 16, num, val);
1253} 1253}
1254 1254
1255#ifdef API_SYSEX_ENABLE
1255uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0}; 1256uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0};
1257#endif
1256 1258
1257void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) { 1259void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) {
1258 #ifdef API_SYSEX_ENABLE 1260 #ifdef API_SYSEX_ENABLE
1259 // SEND_STRING("\n"); 1261 // SEND_STRING("\n");
1260 // send_word(start); 1262 // send_word(start);
1261 // SEND_STRING(": "); 1263 // SEND_STRING(": ");
1264 // Don't store the header
1265 int16_t pos = start - 4;
1262 for (uint8_t place = 0; place < length; place++) { 1266 for (uint8_t place = 0; place < length; place++) {
1263 // send_byte(*data); 1267 // send_byte(*data);
1264 midi_buffer[start + place] = *data; 1268 if (pos >= 0) {
1265 if (*data == 0xF7) { 1269 if (*data == 0xF7) {
1266 // SEND_STRING("\nRD: "); 1270 // SEND_STRING("\nRD: ");
1267 // for (uint8_t i = 0; i < start + place + 1; i++){ 1271 // for (uint8_t i = 0; i < start + place + 1; i++){
1268 // send_byte(midi_buffer[i]); 1272 // send_byte(midi_buffer[i]);
1269 // SEND_STRING(" "); 1273 // SEND_STRING(" ");
1270 // } 1274 // }
1271 uint8_t * decoded = malloc(sizeof(uint8_t) * (sysex_decoded_length(start + place - 4))); 1275 const unsigned decoded_length = sysex_decoded_length(pos);
1272 uint16_t decode_length = sysex_decode(decoded, midi_buffer + 4, start + place - 4); 1276 uint8_t decoded[API_SYSEX_MAX_SIZE];
1273 process_api(decode_length, decoded); 1277 sysex_decode(decoded, midi_buffer, pos);
1278 process_api(decoded_length, decoded);
1279 return;
1280 }
1281 else if (pos >= MIDI_SYSEX_BUFFER) {
1282 return;
1283 }
1284 midi_buffer[pos] = *data;
1274 } 1285 }
1275 // SEND_STRING(" "); 1286 // SEND_STRING(" ");
1276 data++; 1287 data++;
1288 pos++;
1277 } 1289 }
1278 #endif 1290 #endif
1279} 1291}
diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h
index b11854101..a049fd43c 100644
--- a/tmk_core/protocol/lufa/lufa.h
+++ b/tmk_core/protocol/lufa/lufa.h
@@ -70,7 +70,6 @@ typedef struct {
70#ifdef MIDI_ENABLE 70#ifdef MIDI_ENABLE
71 void MIDI_Task(void); 71 void MIDI_Task(void);
72 MidiDevice midi_device; 72 MidiDevice midi_device;
73 #define MIDI_SYSEX_BUFFER 32
74#endif 73#endif
75 74
76#ifdef API_ENABLE 75#ifdef API_ENABLE
@@ -79,6 +78,9 @@ typedef struct {
79 78
80#ifdef API_SYSEX_ENABLE 79#ifdef API_SYSEX_ENABLE
81 #include "api_sysex.h" 80 #include "api_sysex.h"
81 // Allocate space for encoding overhead.
82 //The header and terminator are not stored to save a few bytes of precious ram
83 #define MIDI_SYSEX_BUFFER (API_SYSEX_MAX_SIZE + API_SYSEX_MAX_SIZE / 7 + (API_SYSEX_MAX_SIZE % 7 ? 1 : 0))
82#endif 84#endif
83 85
84// #if LUFA_VERSION_INTEGER < 0x120730 86// #if LUFA_VERSION_INTEGER < 0x120730