10 Zeichen pro Zeile: Zellenbreite am Geraet gemessen, Zeilen zentriert
Die RS232-Strecke ESP32 -> MAX3232 -> Anzeige ist am Geraet bestaetigt; damit war "probe.py pitch" moeglich und hat die offene Zeichenbreiten-Frage geklaert. Das Ergebnis korrigiert eine Annahme: Bisher stand CHARS_PER_LINE = 9, abgezaehlt am Zeilenumbruch. Gemessen wurde damit aber der Auto-Vorschub der Sperrschrift (7 px), nicht die Zeichenbreite. Die Zeichenmatrix ist 6 px breit -- zehn Ziffern, einzeln auf x = i*6 gesetzt, stehen sauber getrennt nebeneinander. - display._emit_line positioniert jedes Zeichen selbst, statt den Auto-Vorschub laufen zu lassen. CHARS_PER_LINE = 10, CELL_WIDTH = 6. - Die Deklination passt dadurch in voller Form: +38°47'01" statt +38°47'01. - show_lines sendet ein Telegramm je Zeile. Mit Einzelpositionierung kaemen beide zusammen auf 224 der erlaubten 230 Bytes -- zu wenig Reserve fuer den Dauerbetrieb. Die Reihenfolge bleibt unten vor oben (Home-Zelle). - Zeilen werden zentriert (CENTER_LINES, LINE_X). Der Zeichenblock bleibt dabei gleich breit und an derselben Stelle, damit keine Reste stehen bleiben. - probe.py kommt mit aufs Geraet: Die Anzeige haengt jetzt am ESP32, nur von dort laesst sich die Geometrie noch ausmessen. Die Tests pruefen nicht mehr auf zusammenhaengenden Text im Telegramm -- den gibt es nicht mehr -- sondern rechnen ueber die Cursor-Sequenzen zurueck, was wirklich auf welcher Zelle landet. 97 Tests gruen, Kette am Geraet im Sekundentakt bestaetigt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+8
-7
@@ -436,7 +436,7 @@ class TestWifi(unittest.TestCase):
|
||||
DEPLOYED = (
|
||||
"ticks.py", "migra.py", "config.py", "transport.py", "display.py",
|
||||
"coords.py", "lx200.py", "mount_client.py", "brightness.py",
|
||||
"displayloop.py", "wifi.py", "run_esp32.py",
|
||||
"displayloop.py", "wifi.py", "run_esp32.py", "probe.py",
|
||||
)
|
||||
|
||||
|
||||
@@ -574,12 +574,13 @@ class TestEsp32GegenMock(unittest.TestCase):
|
||||
self.assertTrue(any("Montierung" in line for line in self.log))
|
||||
# Die Hinweiszeilen stehen wirklich im Telegramm -- ohne den Text hier
|
||||
# zu wiederholen, sonst bricht der Test bei jeder Umformulierung.
|
||||
gesendet = "".join(chr(int(b, 16)) if 32 <= int(b, 16) < 127 else "."
|
||||
for zeile in out.getvalue().splitlines()
|
||||
if zeile.startswith("TX:")
|
||||
for b in zeile.split(":", 1)[1].split())
|
||||
for zeile in config.NOLINK_LINES:
|
||||
self.assertIn(zeile, gesendet)
|
||||
# Seit jedes Zeichen einzeln positioniert wird, steht der Text nicht mehr
|
||||
# am Stueck im Telegramm; deshalb ueber die Cursor-Sequenzen zurueckrechnen.
|
||||
from test_display import zeile as _zeile
|
||||
frames = [bytes(int(b, 16) for b in z.split(":", 1)[1].split())
|
||||
for z in out.getvalue().splitlines() if z.startswith("TX:")]
|
||||
for i, erwartet in enumerate(config.NOLINK_LINES):
|
||||
self.assertEqual(_zeile(frames, i).strip(), erwartet)
|
||||
|
||||
def test_ohne_wlan_zeigt_die_anzeige_kein_wlan(self):
|
||||
import config
|
||||
|
||||
Reference in New Issue
Block a user