diff options
Diffstat (limited to 'tmk_core')
| -rw-r--r-- | tmk_core/common/keycode.h | 2 | ||||
| -rw-r--r-- | tmk_core/protocol/lufa/descriptor.c | 6 | ||||
| -rw-r--r-- | tmk_core/protocol/lufa/lufa.c | 34 | ||||
| -rw-r--r-- | tmk_core/protocol/lufa/lufa.h | 4 |
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 | ||
| 1255 | uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0}; | 1256 | uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0}; |
| 1257 | #endif | ||
| 1256 | 1258 | ||
| 1257 | void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) { | 1259 | void 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 |
