Closes every hardware question that was blocking the integration design,
so the design now rests on measurements rather than assumptions.
Probe results, all against the real printer:
- GS I 1 returns 0x20, unique against 0x01/0x0D/0x13. This is what keeps
the integration small: model identity stays a byte and the existing
per-job identification flow works. Had it returned nothing or 0x01 the
POS895 would have been indistinguishable from a TM-T30III by probe, and
model identity would have had to come from discovery instead.
- GS I 66 and 67 are blank, so the model-name fallback the work items
proposed is useless here. GS I 68 returns the serial, and it matches
the SPRT discovery serial exactly, which makes it a correlation key
between a discovered printer and a connected one.
- GS ( L prints nothing. ESC * 33 and GS v 0 both render correctly across
the full 576 dots, so the adapter uses PrintImageBitModeAsync and the
GS v 0 work item is dropped as redundant.
- ESC t is honoured and index 18 really is CP852; 2 and 0 also render.
That last one exposed a fleet-wide bug that is deliberately left out of
scope: PrintTextAsync hardcodes CP852 for every printer, and CP852 cannot
encode e-grave, a-grave, u-grave, e-circumflex, i-grave or o-grave, so
French and Italian accents are dropped on the Epsons too. Now known to be
fixable via ESC t 2, but it needs its own spec.
The design spec covers discovery composition, the adapter, the three
switch registrations, testing and risks. It calls out that the
ReceiptConverterFactory WorkareaTicket switch defaults to 33 columns, so
missing it yields a POS895 printing kitchen tickets at the narrow
TM-U220 layout: wrong, but not obviously broken.
Claude-Session: https://claude.ai/code/session_01E6N3P4nSZLtp4BC2LXVref