Mackie Showbox Reverse Engineering

  • Ersteller 6stringtheory
  • Erstellt am
Ich habe mir heute noch einmal intensiv Gedanken darüber gemacht, ob ich nicht doch einen anderen Mikrocontroller nehmen sollte, einfach um mir alle Türen offen zu halten.
Meine Gedanken waren, dass es doch perfekt wäre, wenn man am Ende die theoretische Möglichkeit hätte die eierlegende Wollmilchsau zu programmieren:
  • 2x TRS (zum Verbinden von 2 Doppelfußschaltern)
  • 3x MIDI (In, Out, Through)
  • 1x USB In
    • um USB-MIDI-Controller anzuschließen (zur Fernsteuerung der Box)
  • 1x USB Out
    • um einen USB-MIDI-Controller zu emulieren (Breakaway Mixer als DAW-Controller)
    • um eine Tastatur/Maus zu emulieren (z.B. als Page-Turner)
  • Bluetooth LE
    • um eine MIDI über Bluetooth-Verbindung mit einem Bluetooth MIDI-Controller/Computer/Tablet/Smartphone herzustellen (zur Fernsteuerung der Box)
    • um eine MIDI über Bluetooth-Verbindung mit einem Computer/Tablet/Smartphone herzustellen (Breakaway Mixer als DAW-Controller)
    • um eine HID über Bluetooth-Verbindung mit einem Computer/Tablet/Smartphone herzustellen (Page-Turner)
  • WiFi
    • um Firmware-Updates OTA einzuspielen
    • um eine MIDI über WiFi-Verbindung mit einem Computer/Tablet/Smartphone herzustellen (Breakaway Mixer als DAW-Controller)
    • um eine MIDI über WiFi-Verbindung mit einem entsprechenden MIDI-Controller oder Computer/Tablet/Smartphone herzustellen (zur Fernsteuerung der Box)
    • um ein Webinterface bereitzustellen, über das man die Box fernsteuern kann ohne auf Apps angewiesen zu sein
  • Ethernet
    • um eine MIDI über Ethernet-Verbindung mit einem Computer/Tablet/Smartphone herzustellen (Breakaway Mixer als DAW-Controller)
    • um eine MIDI über Ethernet-Verbindung mit einem entsprechenden MIDI-Controller oder Computer/Tablet/Smartphone herzustellen (zur Fernsteuerung der Box)
    • um ein Webinterface bereitzustellen, über das man die Box fernsteuern kann ohne auf Apps angewiesen zu sein
Da HUI und Mackie Control Protocol auch einfach nur auf MIDI aufbauen, könnte man diese damit jeweils ebenso realisieren.


Der Haken: Es gibt keinen Mikrocontroller, der das alles kann.
Ein Raspberry Pi 4B könnte das zwar theoretisch, aber das sind mal eben 20 Watt und ne ordentliche Stange Geld und dann jedes mal lange Boot-Zeiten...
ESP32: Kann kein USB-OTG. (Könnte man nachrüsten)
ESP32-S3: Kann kein Ethernet. (Könnte man nachrüsten) ; Kann nur entweder USB Host oder USB Device sein.
Raspberry Pi Pico W: Kann theoretisch wohl alles.

Also vielleicht wird es am Ende der kleine Pi Mikrocontroller. Vorteil vom ESP32-S3 wäre, dass man den Code später fast 1:1 für andere Mikrocontroller wiederverwenden kann.

Theoretisch könnte das später sogar als Kern für den Nachbau eines Xsonic Airstep Smart Controllers wiederverwendet werden.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: 1 Benutzer
Ich habe nun mal wieder ein bisschen Zeit gefunden, um weiter an dem Projekt zu arbeiten.
Entschieden habe ich mich für den ESP32-S3, weil ich so auch ohne großen Zusatzaufwand andere Mikrocontroller, wie z.B. den ESP8266, ESP32 oder diverse Arduinos (aber dann natürlich ohne Bluetooth oder WiFi) benutzen kann.
Vorübergehend muss nun erstmal eine alte Plastikbox herhalten, damit ich die doch etwas größere Menge an Bauteilen irgendwie fixieren kann. Dafür habe ich ein paar passende Löcher gebohrt und dann die Anschlüsse hineingeschraubt:
IMG_20240721_220022.jpg

Als Mikrocontroller habe ich hier den ESP32-S3 als "ESP32-S3-DevKitC-1"-Modul genommen und auf ein Breakout-Board mit Schraubklemmen gesteckt. Findet man beispielsweise hier.
So muss ich nichts fest verlöten oder mich auf fragile Dupont-Kabel verlassen. Das große Board neben dem Mikrocontroller ist nur ein Spannungswandler der mir hier die 12V zu 5V macht. Völlig überdimensioniert, aber hat Schraubklemmen, daher habe ich vorerst diesen gewählt. Die MIDI-Buchsen sind noch nicht verkabelt und auch erstmal nur die eine TRS-Buchse. Die USB-C Anschlüsse vom Mikrocontroller habe ich jetzt nicht extra nach außen verlegt, da es ja nur ein provisorisches Gehäuse ist. Ein SPI Ethernet-Adapter fehlt eigentlich auch noch.

Ich habe meinen Code nun sehr strukturiert in diesem Github Repository veröffentlicht: https://github.com/T-vK/ShowboxInterceptor
Da die komplizierte Logik schön abgekapselt in separaten Libraries liegt, lässt sich mit wirklich wenig und sehr einfachem Code z.B. ein Fußschalter zum Stummschalten realisieren:

C++:
#include <Arduino.h>
#include <OneButton.h>
#include "MackieShowbox/MackieShowbox.h"

MackieShowbox showbox(9, 10, 17, 18); // Base RX, Base TX, Mixer RX, Mixer TX

OneButton muteButton(48, true); // Mute button pin, internal pull-up

void handleMuteButton() {
    bool mute = showbox.getBoolEntityValue(entity_id::MAIN_MUTE);
    showbox.setEntityValue(entity_id::MAIN_MUTE, !mute);
}

void setup() {
    muteButton.attachClick(handleMuteButton);
    showbox.begin();
}

void loop() {
    showbox.loop();
    muteButton.tick();
}

Aber anstatt des Stummschaltens kann man natürlich auch beliebige andere Einstellungen verändern wie z.B. Effekte, Gain, Volume, ...

Aber auch so etwas wie mein gewünschter Looper mit 2 Fußschaltern ist nun in unter 30 Zeilen einfachstem Code realisierbar:

C++:
#include <Arduino.h>
#include <OneButton.h>
#include "MackieShowbox/MackieShowbox.h"

MackieShowbox showbox(9, 10, 17, 18);
OneButton recordButton(48, true), stopButton(47, true);

void handleRecordOverdubPlayButton() {
    showbox.sendLooperButtonAction(looper_button_action::DOWN);
    showbox.sendLooperButtonAction(looper_button_action::UP);
}

void handleStopButton() {
    showbox.sendLooperButtonAction(looper_button_action::DOUBLE_PRESS);
}

void handleDeleteButton() {
    showbox.sendLooperButtonAction(looper_button_action::LONG_PRESS);
}

void setup() {
    recordButton.attachClick(handleRecordOverdubPlayButton);
    stopButton.attachClick(handleStopButton);
    stopButton.attachLongPressStart(handleDeleteButton);
    showbox.begin();
}

void loop() {
    showbox.loop();
    recordButton.tick();
    stopButton.tick();
}

Tricky am Looper fernsteuern war lediglich, zu verstehen, dass man nicht direkt ein Paket zum verändern des Looper Statuses schicken kann, sondern ein Paket schicken muss in welchem steht, dass man gerade einen kurzen, langen oder doppelten Tastendruck ausgelöst hat.

Das direkte laden von Presets per Fußschalter habe ich noch nicht getestet. Es wird natürlich funktionieren, aber interessant wird die Frage, ob es da eine spürbare Verzögerung gibt. Falls ja kann man sich aber natürlich behelfen indem man die gewünschten Einstellungen alle auf dem Mikrocontroller hardcodiert.
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Erster Entwurf für das Gehäuse, was ich noch drucken werde steht nun auch:
Screenshot_20240723-000149_Fennec.png

Es hat exakt die Maße, um die Lücke in der Showbox vollständig auszufüllen und unterstützt auch den "push to release"-Mechanismus.
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Ich sehe schon, in etwa einem Vierteljahr taucht dann das Endprodukt bei "Kostengebundene Dienstleistungen" zum Verkauf auf ;)
 
Haha, ich glaube eher nicht. Alles was ich hier mache stelle ich kostenlos zur Verfügung. :) Auch das 3D-Modell veröffentliche ich, sodass jeder, der Interesse hat, es einfach zuhause oder beim Anbieter seines Vertrauens drucken lassen kann. Ich versuche auch alles so einfach und zugänglich wie möglich zu halten, damit wirklich jeder, der will, es nachbauen kann.

Das 3D-gedruckte Gehäuse ist am Ende sowieso optional. Eine Verbindungsdose für 1-2€ aus dem Baumarkt tut es auch:
IMG_20240723_111400.jpg
IMG_20240723_110929.jpg






Theoretisch könnte ich auch noch eine passende Platine für das 3D-gedruckte Gehäuse designen. Dann könnte man sich mit der Gerber-Datei bei einem beliebigen Anbieter die Platine ätzen und bestücken lassen, aber viel gewonnen wäre dadurch natürlich nicht.





Hat noch jemand Vorschläge, für Anschlüsse die ich außen verfügbar machen sollte?
Ich habe bisher:
  • 2x RJ45 zur Verbindung von Showbox und Breakaway Mixer
  • 1x RJ45 für Ethernet
  • 2x TRS-Buchse für Fußschalter
  • 3x MIDI (In, Out, Through)
  • 1x USB-C (OTG)
  • 1x USB-C (zum Flashen)
Und als weitere Ideen:
  • Ich könnte auch die 12V Leitung als DC-Jack oder Zigarettenanzünder-Anschluss nach außen führen
  • oder USB-Ladeports hinzufügen (USB-A oder USB-C)
  • oder mit einem weiteren kleinen Spannungswandler ein paar 9V-Anschlüsse realisieren. Insgesamt sind allerdings nur rund 20W verfügbar (bzw. 10W bei Akkubetrieb).
  • Ich könnte auch noch einen USB-A-Port und einen USB-B Port verbauen, die man jeweils alternativ zum USB-C OTG Port benutzen könnte (allerdings immer nur einen zur Zeit).
  • Eine weitere Idee wäre es TRS-Buchsen hinzuzufügen, die als Schalter fungieren und anderes Equipment steuern könnten.
  • Ein Anschluss für eine externe Antenne wäre auch denkbar. (Mein Modul hat leider keinen Anschluss dafür, aber so könnte jemand anderes sich ein entsprechendes kaufen und nutzen.)

Platz ist natürlich begrenzt, aber vielleicht möchte ja jemand Vorschläge oder Ideen teilen.
 
Zuletzt bearbeitet:
Ich die Frontseite einfach mit Anschlüssen vollgeknallt, soviel wie geht und oben kommen ein paar Buttons rauf. Da wäre zwar auch noch reichlich Platz für mehr Anschlüsse, aber wenn es mal anfängt zu nieseln, will ich nicht gleich Wasser in meine Anschlüsse bekommen.
So in die Richtung dachte ich:
Screenshot_20240724-002109_Fennec.png

Der USB-C Port muss auch noch nach vorne verlegt werden.
Ansonsten hätte ich vorne jetzt:
  • 2x RJ45 zur Verbindung von Showbox und Breakaway Mixer
  • 1x RJ45 für Ethernet
  • 3x TRS-Buchse für Fußschalter oder zum Schalten anderer Geräte
  • 3x MIDI (In, Out, Through)
  • 4x USB-A (nur Stromverdorgung)
  • 1x 12V Buchse
  • 1x 9V Buchse
 
Klasse Projekt, ich verfolge es interessiert. Spannend, was für Hardware-Verbindungen und Protokolle da in so einem Fall verwendet werden und wie sich das Reverse-Engeneering eines solchen Protokolls abläuft. Ein Bekannter von mir hat das vor Jahrzenten mal für MIDI gemacht, weil er keine Unterlagen hatte, wie MIDI genau funktioniert. Das wäre natürlich um Größenordnungen einfacher als das, was du gerade machst. Den elektrotechnischen Teil verstehe ich weniger, ab da wo Programmcode zu sehen ist, kann ich dir folgen. Viel Erfolg (y)
 
  • Gefällt mir
Reaktionen: 1 Benutzer
Screenshot_20240726-205214_Fennec.png

Screenshot_20240726-205530_Fennec.png

Ich denke das wird das finale Design.
Die Menge an USB-Ladebuchsen ist zwar absolut krank, aber 4x USB-A mit Quickcharge 3.0 Unterstützung kosten gerade mal 5€ und die USB-C Buchsen kosten 38 Cent das Stück... Also warum nicht?
Das einzige was ich noch nicht zu meiner Zufriedenstellung lösen konnte ist, dass man sich den MIDI-Schaltkreis selber löten muss.
Eigentlich ist mein Ziel, dass man maximal Kabel an die Buchsen löten muss, aber sonst alles stecken/schrauben kann.
Das nächste in die Richtung, was ich finden kann ist die Kombination aus dem Arduino MIDI Shield und einem level shifter. Aber das erscheint mir doch sehr unsauber.
 
Hatte noch nicht ernsthaft Zeit weiter an dem Projekt zu arbeiten, aber ich habe das 3D-Modell doch nochmal verändert, damit man die MIDI-Ports nicht selber verlöten muss.

1722891658742.png


Der MIDI-Through wird jetzt zwar im Deckel sein, aber ich denke das ist okay und dafür passt nun auch eine weitere TRS-Buchse.
Die Buttons oben haben noch keine feste Funktion. Ich denke mal einer wird zum an/ausmachen sein und ein paar weitere, um die TRS Buchsen von Dual-Footswitch auf Expression-Pedal umzustellen.
Die Spannung der DC-Out-Buchsen kann frei gewählt werden (bis zu 12V).
Theoretisch lässt sich das gesamte Projekt komplett ohne Löten nachbauen, wenn man auf die DC-Out-Buchsen verzichtet. Ich würde allerdings empfehlen wenigstens die Kabel für die TRS-Buchsen und Buttons zu verlöten.

Ich muss mal schauen, wann ich mich an den Druck traue. Könnte sein, dass ich mich an einigen Stellen vermessen habe und jeder Druck wird ~12h dauern und ~10€ kosten.
 
  • Gefällt mir
Reaktionen: 2 Benutzer
Ich habe mir heute mal ein paar Gedanken darüber gemacht wie viele Kabelverbindungen am Ende eigentlich gemacht werden müssen und es sind doch schon einige geworden. Alleine 32 Verbindungen zu GND habe ich gezählt. Das wird ohne Löten eine ganz schöne Herausforderung, wenn es nicht im Kabelsalat enden soll. Ich hoffe ich finde da vielleicht eine Art Schraubleiste mit 32 Kontaktpunkten.

Dann ist mir noch eingefallen, dass die Buttons im Deckel ja farbige LED-Ringe haben, die man gar nicht ohne weiteres hätte schalten können. Dafür habe ich dann aber vorhin einen kleines Modul gefunden, sodass auch hier keine Widerstände oder Transistoren verlötet werden müssen. Da das Modul aber nur 3 LEDs steuern kann. Belasse ich es mal bei 4 Buttons. Der Power-Button leuchtet einfach durchgehend, wenn die Box an ist und die LEDs der anderen 3 können dann beliebig vom Mikrocontroller geschaltet werden.

Zu guter Letzt habe ich dann eben noch ein 2-Kanal Relais-Modul hinzugefügt, über welches ich die Datenleitungen zwischen der Showbox und dem Breakaway Mixer schalten werde. So kann sichergestellt werden, dass beim Ausschalten der Erweiterungsbox, die RJ45-Verbindudung zwischen Showbox und Breakaway Mixer wieder direkt abläuft und nicht mehr gezwungenermaßen über den Mikrocontroller (der dann ja keinen Strom mehr hätte).

Einen kleinen Schraubanschluss für Antennen (SMA) für WLAN/Bluetooth habe ich der Box auch noch spendiert. Ich persönlich werde ihn aber wahrscheinlich nicht nutzen, da der Mikrocontroller schon eine kleine PCB-Antenne mitbringt.

1723055502063.png
 
Bei Stiftleisten müsste man aber alle Pins miteinander verlöten und dann ist da noch die Problematik mit der Zuverlässigkeit wenn man diese 1-Pin Dupont Stecker benutzt.
Von der Theorie her wäre so eine Schraubleiste ganz gut, aber die sind schon echt lang für die geringe Menge an Löchern.
 
Ich habe nun mal ein wenig Zeit gefunden, die Schaltung irgendwie zumindest ansatzweise übersichtlich aufzumalen:
ShowboxInterceptorFor3DCase-v4.png

Das ist zumindest mal ein erster Entwurf. Da ich aber nun unerwartet viele GPIO Pins des Mikrocontrollers brauche, wie man sieht, muss ich mich mit der Dokumentation nochmal genauer auseinandersetzen, denn einige davon sind Strapping Pins, welche man eigentlich erst nach dem Bootvorgang verbinden sollte, um diesen nicht zu stören. Ggf. muss ich sonst noch ein kleines Expander Modul her.

Die Sleeves der TRS-Buchsen habe ich bewusst nicht mit GND verbunden, auch wenn das vielleicht falsch aussieht. Das erlaubt aber die Flexibilität, die einzelnen Pins je nach Bedarf (Expression Pedal, Footswitch etc.) als input/output zu nutzen oder auf GND / VCC zu schalten.
 

Unser weiteres Online-Angebot:
Bassic.de · Deejayforum.de · Sequencer.de · Clavio.de · Guitarworld.de · Recording.de

Musiker-Board Logo
Zurück
Oben