From f7717c7ac305f805d2d42312d6c458fcea6e49e8 Mon Sep 17 00:00:00 2001 From: mat1jaczyyy Date: Fri, 3 Jan 2020 01:21:05 +0100 Subject: [PATCH] Jump to bootloader to resolve challenge instead of bruteforcing https://github.com/gluon/AbletonLive9_RemoteScripts/issues/36 what the fuck --- Makefile | 2 +- build/cfw.syx | Bin 62079 -> 61903 bytes include/other/challenge.h | 13 ------------- include/sysex/sysex.h | 1 - src/app.c | 2 -- src/other/challenge.c | 21 --------------------- src/sysex/sysex.c | 13 +++++++++++-- 7 files changed, 12 insertions(+), 40 deletions(-) delete mode 100644 include/other/challenge.h delete mode 100644 src/other/challenge.c diff --git a/Makefile b/Makefile index 8d2934e..c9b104e 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ SOURCES += src/flash/flash.c src/flash/settings.c SOURCES += src/led/led.c src/led/palettes.c SOURCES += src/send/send.c SOURCES += src/sysex/sysex.c src/sysex/messages.c -SOURCES += src/other/challenge.c src/other/conversion.c src/other/tempo.c +SOURCES += src/other/conversion.c src/other/tempo.c SOURCES += src/modes/mode.c SOURCES += src/modes/normal/performance.c src/modes/normal/ableton.c src/modes/normal/note.c src/modes/normal/drum.c src/modes/normal/fader.c src/modes/normal/programmer.c src/modes/normal/piano.c src/modes/normal/text.c diff --git a/build/cfw.syx b/build/cfw.syx index 25bc9292150021124eab6ab4ac92e47a5e872cbb..5d39b00a7b7b2d40dff475c0c0f8d43dd78fdb68 100644 GIT binary patch delta 36758 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 diff --git a/include/other/challenge.h b/include/other/challenge.h deleted file mode 100644 index 3a7098c..0000000 --- a/include/other/challenge.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef CHALLENGE_H -#define CHALLENGE_H - -#include "app.h" - -#include "sysex/messages.h" - -u8 challenge_do; -u16 challenge_counter; - -void challenge_timer_event(); - -#endif \ No newline at end of file diff --git a/include/sysex/sysex.h b/include/sysex/sysex.h index e415b92..eb90cf0 100644 --- a/include/sysex/sysex.h +++ b/include/sysex/sysex.h @@ -6,7 +6,6 @@ #include "string.h" #include "modes/mode.h" -#include "other/challenge.h" void handle_sysex(u8 port, u8 * d, u16 l); diff --git a/src/app.c b/src/app.c index 8da6ad1..e98db4d 100644 --- a/src/app.c +++ b/src/app.c @@ -54,8 +54,6 @@ void app_timer_event() { tempo_timer++; tempo_tick(); - if (challenge_do) challenge_timer_event(); - (*mode_timer_event[mode])(); } diff --git a/src/other/challenge.c b/src/other/challenge.c deleted file mode 100644 index 7b72efb..0000000 --- a/src/other/challenge.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "other/challenge.h" - -#define challenge_speed 9 // The higher this value is, the more prone the FW is for crashes for whatever reason. Speeds over 32 can't be handled by the buffer at all -#define challenge_max 0x4000 - -u8 challenge_do = 0; -u16 challenge_counter = 0; - -void challenge_timer_event() { - for (u8 i = 0; i < challenge_speed; i++) { - syx_challenge_response[7] = challenge_counter >> 7; - syx_challenge_response[8] = challenge_counter & 127; - - hal_send_sysex(USBMIDI, &syx_challenge_response[0], syx_challenge_response_length); - - if (++challenge_counter >= challenge_max) { - challenge_do = 0; - return; - } - } -} \ No newline at end of file diff --git a/src/sysex/sysex.c b/src/sysex/sysex.c index 578af9c..8af5205 100644 --- a/src/sysex/sysex.c +++ b/src/sysex/sysex.c @@ -11,8 +11,17 @@ void handle_sysex(u8 port, u8 * d, u16 l) { if (!memcmp(d, &syx_challenge[0], syx_challenge_length)) { if (port == USBMIDI) { if (l == 12) { - challenge_do = 1; - challenge_counter = 0; + u32 result = (* // wtf? + (u32 (*)(u32)) // cast to function pointer + *(u32*)0x080000EC // grab pointer to challenge function from table + )( // call + *(u32*)(d + 7) // grab Live's challenge value + ); // :b1: + + syx_challenge_response[7] = result & 0x7F; + syx_challenge_response[8] = (result >> 8) & 0x7F; + + hal_send_sysex(USBMIDI, &syx_challenge_response[0], syx_challenge_response_length); } else if (l == 8) { // Live Quit Message mode_default_update(mode_performance);