diff --git a/IMG_20251226_173113.jpg b/IMG_20251226_173113.jpg new file mode 100644 index 0000000..120a4f1 Binary files /dev/null and b/IMG_20251226_173113.jpg differ diff --git a/IMG_20260309_214103.jpg b/IMG_20260309_214103.jpg new file mode 100644 index 0000000..79d4fce Binary files /dev/null and b/IMG_20260309_214103.jpg differ diff --git a/abfahrt3.jpeg b/abfahrt3.jpeg new file mode 100644 index 0000000..4c35057 Binary files /dev/null and b/abfahrt3.jpeg differ diff --git a/alte_platine.jpeg b/alte_platine.jpeg new file mode 100644 index 0000000..5f76e0e Binary files /dev/null and b/alte_platine.jpeg differ diff --git a/assets/IMG_20251226_173113.jpg b/assets/IMG_20251226_173113.jpg new file mode 100644 index 0000000..120a4f1 Binary files /dev/null and b/assets/IMG_20251226_173113.jpg differ diff --git a/case1.jpeg b/case1.jpeg new file mode 100644 index 0000000..ea17d65 Binary files /dev/null and b/case1.jpeg differ diff --git a/case_closed.jpeg b/case_closed.jpeg new file mode 100644 index 0000000..2eceae8 Binary files /dev/null and b/case_closed.jpeg differ diff --git a/erste_funktion.jpeg b/erste_funktion.jpeg new file mode 100644 index 0000000..d763181 Binary files /dev/null and b/erste_funktion.jpeg differ diff --git a/erstes_logo1.jpeg b/erstes_logo1.jpeg new file mode 100644 index 0000000..f1a2754 Binary files /dev/null and b/erstes_logo1.jpeg differ diff --git a/main.typ b/main.typ index 8dadd21..85ce71f 100644 --- a/main.typ +++ b/main.typ @@ -1,20 +1,24 @@ #import "@preview/diatypst:0.9.0": * +#import sym: arrow #set text(font: "TeX Gyre Adventor") +#show heading.where(level: 3): it =>[ + #block(it.body) +] + #show: slides.with( - title: "SITREP Busanzeiger", - subtitle: "Aktueller Stand und Zukunftsausblick", - date: "25.01.2026", - authors: ("Christian & Pascal"), + title: "Abfahrtsanzeiger Hacken 2.0", + date: "17.05.2026", + authors: ("Christian Seiler, flop"), // Optional (for more see docs at https://mdwm.org/diatypst/) ratio: 16/9, layout: "medium", title-color: blue.darken(30%), - toc: true, + toc: false, ) -= Recap += Was bisher geschah == Erstkontakt mit den Stadtwerken (Februar 2023) #figure( @@ -69,69 +73,211 @@ image("a05077ee7e192d99.jpg", width: auto), ) ) -== Weiterentwicklung {vor/für} de{m/n} 39c3 + += Erste Weiterentwicklung Hardware & Firmware +== Datenformat 1.0 + +Binärformat, das aus einer Liste von Elementen besteht, die gezeichnet werden sollen. + +=== Features + + - Bilder + - Animationen + - Scrollende Bilder (vorgerenderter Lauftext) + +=== Bilddaten + + - Koordinaten fangen bei (0, 0) an + - 1 bit pro Pixel + - Pixel Index: $n(x, y) = y * W + x$ + - Byte Index: $B(x, y) = floor(n(x, y) / 8)$ + - Bit Index: $b(x, y) = n(x, y) mod 8$ + + +== Spaß am 39C3 (Dezember 2025) + #grid( columns: 2, gutter: 15mm, - "\n- weiterhin ESP32\n- weiterhin embedded Rust\n- Rewrite der Anzeigelogik\n- Neues Datenformat (Bitmap basiert)\n- Binary Blob wird von Server geladen", - image("signal-2026-01-23-233504_002.jpeg", width: auto), + image("IMG_20251226_173113.jpg", width: auto), + [ + - Mikrocontroller + Firmware + - Basierend auf Entropia-Arbeit (Rust, ESP32) + - Modifikationen zum Rendering des Datenformats + + - Busanzeiger Paint (Webinterface) + - Zeichnen mit verschiedenen Pixelgrößen + - Rudimentäres Textrendering + - Importieren von Bildern/GIFs + - Erstellung von Animationen + - "Vibe-Coding for the win" + + - Round-Robin Bilder / Animationen vom Server + + - CLI-Tool zur Vorschau (#arrow.r Demo) + ] ) -= Entwicklung Hardware & Firmware -== Datenformat für Busanzeiger -Das Datenformat ist ein Binaerformat, das sequenziell abgelaufen wird. Alle -indivduellen Eintraege sind auf 1 Byte ausgerichtet, notfalls wird mit 0-Bits -aufgefuellt. +== Custom PCB 1.0 + +#grid( + columns: 2, + gutter: 15mm, + image("IMG_20260309_214103.jpg", width: auto), + [ + - LVDS-Transceiver auf Platine (#arrow.r altes Mainboard nicht mehr benötigt) + - Anschluss per 8p8c ("RJ45") Stecker (#arrow.r kein Custom Lötjub) + - Eigene Spannungsversorgung für Mikrocontroller + - Alternativer Anschluss für Seeed ESP32-S3 (kleineres Format) + - Funktioniert ohne Firmware-Änderung auf bestehendem Mikrocontroller #emoji.face + ] +) -Alle Koordinaten fangen links oben bei (0, 0) an. +#align(center)[ + #image("erste_funktion.jpeg", width: 60%) +] -Eine Bitmap ist ein mapping eines binaeren 2D-Bildes auf eine Byte-Sequenz. -Um auf das Pixel (x, y) zuzugreifen muss man erst den Pixel-Index n bestimmen -ueber +#align(center)[ + #image("erstes_logo1.jpeg", width: auto) +] -n = y \* width + x +#grid( + columns: 2, + gutter: 15mm, + image("alte_platine.jpeg", width: auto), + [ + === Not Everything is Perfect #emoji.face.sad -Ein Bitmap der Breite `width` und Hoehe `height` benoetigt + - PIN-Reihe für alte Mikros nicht korrekt + - Stromversorgung für Seeed ESP32S3 nicht korrekt + - Bohrlöcher falsch platziert + - Falsche LVDS-Polarität - N = (breite \* hoehe + 7) / 8 + === Learnings -Bytes an Speicher. + - Prototyp-Platine war gute Testing-Platform + - Aber: konzentrieren auf einen Mikrocontroller (#arrow.r Seeed ESP32-S3, da 8 MiB SRAM und sehr klein und günstig) + - Kleinere Platine wäre besser, v.a. wenn mehr produziert werden sollen + + ] +) -$ & nabla integral_x^4 laplace x = 1 + 2 + EE phi Phi phi.alt 1/(1/4) sum_a^n \ -& 1+2 $ += Let's Do it All Again == Custom PCB - - - + +#grid( + columns: 2, + gutter: 5mm, + image("neue_platinen.jpeg", width: 8cm), + [ + - Kleiner Formfaktor (5 cm x 5 cm) + - Separate Spannungsversorgungs-Platine (DC-DC) + - Hardware-Bugs gefixed (Polarität, Spannungsversorgung) + - Nur noch ESP32-S3 + - Selbst bestückt + - Montage separat per 3D-Druck-Gehäuse + - Spannungsversorgung für Displays integriert (optional) + ] +) + +#align(center)[ + #image("new_pcb.jpeg", width: auto) +] + +== Datenformat 2.0 + +=== Neue Features + + - Auswahl, ob auf Vorder- oder Rückseite angezeigt + - Support für Text und Fonts + - Support, die aktuelle Uhrzeit anzuzeigen + - Zeitspezifische Anzeigen + - Animation kurz einblenden + - Vorabauslieferung, falls WLAN ausfällt + +== Firmware (WiP) + + - Rewrite in C++ + - ESP32-Rust-Ökosystem noch zu sehr im Fluss, mehrfach darüber geflucht, dass wir ständig refactorn mussten + - ESP32-S3 noch nicht 100% gut supported in Rust + - Unfähigkeit von uns, UART0 nicht für Debug-Ausgaben von Rust verwenden zu lassen + - Für später: A/B OTA Updates gehen mit ESP-Rust aktuell nicht + + - Web-Konfiguration + - Deckel bleibt zu + - Temporärer AP und Web-UI beim ersten Start #arrow.r Web-Konfiguration + + - Uhrzeit via SNTP + +== Web-Konfiguration (WiP, vibes) + #align(center)[ - #image("signal-2026-01-25-180621.png", width: auto) + #image("wifi.png", width: 70%) ] +== Web-Editor (WiP, vibes) + #align(center)[ - #image("signal-2026-01-25-180701.png", width: auto) + #image("webeditor.png", width: auto) ] -= Entwicklung Webinterface -== Busanzeiger Paint +== Montage -#grid( - columns: 2, - gutter: 15mm, - "\n- Zeichnen mit verschiedenen Brushsizes\n- Rudimentäres Textrendering\n- Radieren\n- Importieren von Bildern / GIFs\n- Erstellung von Animationen\n- Erstellung von Binary Blob in JS oder PHP", - image("paint_start.PNG", width: auto), -) -== Logo import #align(center)[ - #image("paint_logo.PNG") + #image("case1.jpeg", width: auto) ] +#align(center)[ + #image("neue_platine.jpeg", width: 100%) +] + += Einsätze + +== Lichti-Maskenball + +#align(center)[ + #image("abfahrt3.jpeg", width: 90%) +] + +== TDF5 2026 + +#align(center)[ + #image("saal_bool.jpeg", width: 90%) +] + += Ausblick + == Ausblick -- System zur Verwaltung - - Zeitpläne - - Bestehende Slides Bearbeiten - - Mehreren Displays Slides zuweisen -- Idee: Zeichnen von Bildern auf dem TDF5 - - Bild / eine Animation erstellen und absenden übers Webinterface - - Einreichungen werden moderiert - - Anstößige Inhalte werden entfernt, andernfalls wird es für eine gewisse Zeit angezeigt + + - 23.05. AfD-Verbot jetzt! Demo (Tübingen) + - 04.06. GPN 2026 (Karlsruhe) + - 04.07. Tübix 2026 (Tübingen) + - "First Stable Release" + - Automatische pretalx-Integration (serverseitig) + - ICS-Integration (serverseitig) + - Mehr Busanzeiger flott machen + += Danksagung + +== Danksagung + + - Stadtwerke Tübingen für die Anzeiger + - We stand on the shoulders of giants + - Menschen, die das initiale Reverse Engineering gemacht haben + - Entropia e.V. + - Auslesen des Flash des Original-Mainboards: CC 86 e.V. Heilbronn + - Pascal (\@cal) für den Anfang der Slides + - Rüdiger für 39c3 Busanzeiger Paint + +#grid( + columns: 2, + gutter: 25mm, + image("case_closed.jpeg", width: 5cm), + [ + \ + \ + \ + *Case Closed* + ] +) diff --git a/neue_platine.jpeg b/neue_platine.jpeg new file mode 100644 index 0000000..243ad33 Binary files /dev/null and b/neue_platine.jpeg differ diff --git a/neue_platinen.jpeg b/neue_platinen.jpeg new file mode 100644 index 0000000..d29b1dd Binary files /dev/null and b/neue_platinen.jpeg differ diff --git a/new_pcb.jpeg b/new_pcb.jpeg new file mode 100644 index 0000000..04a33cd Binary files /dev/null and b/new_pcb.jpeg differ diff --git a/saal_bool.jpeg b/saal_bool.jpeg new file mode 100644 index 0000000..317a83b Binary files /dev/null and b/saal_bool.jpeg differ diff --git a/signal-2026-01-25-180621.png b/signal-2026-01-25-180621.png deleted file mode 100644 index 3c5a717..0000000 Binary files a/signal-2026-01-25-180621.png and /dev/null differ diff --git a/signal-2026-01-25-180701.png b/signal-2026-01-25-180701.png deleted file mode 100644 index 1e0206a..0000000 Binary files a/signal-2026-01-25-180701.png and /dev/null differ diff --git a/webeditor.png b/webeditor.png new file mode 100644 index 0000000..dd4e53b Binary files /dev/null and b/webeditor.png differ diff --git a/wifi.png b/wifi.png new file mode 100644 index 0000000..f37464a Binary files /dev/null and b/wifi.png differ