Plasma display: send the real clear+home; bump suite to 4.11.4.4
The provisioning text on the pod's plasma panel came up garbled — stale content bleeding through, new text overlapping at the wrong position. Root cause recovered from the dumped PD01D221 controller firmware (vrio/PlasmaNew): PlasmaWriter.ClearAll() sent ESC J, which on this controller is NOT a clear — it toggles an orientation/mode bit — so the panel never cleared and the cursor never homed. Fix: ClearAll() now sends the real commands ESC @ (clear active buffer, reset text state) + ESC L (home to 0,0), and the writer hides the cursor once at open with ESC G 0 — exactly what the game and the ROM's own demo do. Verified by running the launcher's actual byte streams through the firmware-modeled vPLASMA emulator: the old ESC J path left stale pixels (732 lit vs 404); the new path renders byte-identical to a freshly cleared panel (404 lit, cursor hidden). Version bumped 4.11.4.3 -> 4.11.4.4 across Launcher, Console, vPOD, the install/build banners, and the diff-suite version assertion. This cuts a clean release boundary that also carries the earlier field fixes (process-tree kill on Stop, Win10 install.bat icacls quoting, real system volume + pre-uninstall opt-in, and the volume menu check-mark fix). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -156,6 +156,12 @@ namespace TeslaSecureConfig
|
||||
_port = new System.IO.Ports.SerialPort(comPort, baud,
|
||||
System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
|
||||
_port.Open();
|
||||
// Hide the text cursor once at startup, exactly as the game and the
|
||||
// controller's own ROM demo do (ESC G 0). ESC @ does not restore it,
|
||||
// so a single hide holds for the session.
|
||||
_port.BaseStream.WriteByte(0x1B); // ESC
|
||||
_port.BaseStream.WriteByte(0x47); // G
|
||||
_port.BaseStream.WriteByte(0x00); // 0 -> cursor hidden
|
||||
ClearAll();
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -166,12 +172,19 @@ namespace TeslaSecureConfig
|
||||
}
|
||||
}
|
||||
|
||||
// ClearAll: send ESC J (clear display) as per Plasma protocol
|
||||
// Clear + home, per the PD01D221 controller's recovered command set (EPROM
|
||||
// dump -> vrio/PlasmaNew/FIRMWARE.md; the ROM's own demo prefixes every
|
||||
// screen with exactly these two). The previous code sent ESC J, which on
|
||||
// this controller is NOT a clear -- it toggles an orientation/mode bit -- so
|
||||
// the panel never cleared and never homed, and each provisioning cycle wrote
|
||||
// stale text at a stale cursor position (garbled overlap in the field).
|
||||
public void ClearAll()
|
||||
{
|
||||
if (_port == null || !_port.IsOpen) return;
|
||||
_port.BaseStream.WriteByte(0x1B); // ESC
|
||||
_port.BaseStream.WriteByte(0x4A); // J (clear screen)
|
||||
_port.BaseStream.WriteByte(0x40); // @ -> clear active buffer, reset text state
|
||||
_port.BaseStream.WriteByte(0x1B); // ESC
|
||||
_port.BaseStream.WriteByte(0x4C); // L -> home cursor to (0,0)
|
||||
_port.BaseStream.Flush();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user