Der Martin: serieller Thermodrucker - bit image

Beitrag lesen

Hallo,

Der Drucker druckt Zeilen von 8 Pixel Höhe, mit 166 Pixel Breite.

bei 60dpi in der Horizontalen (was mit ESC K eingestellt wird) bedeutet das vermutlich, dass der Drucker nur eine Druckbreite von knapp 3" hat, ungefähr 70mm, wie für Kassenzettel und so. Auch Streifendrucker genannt. ;-)

Für jede neue Zeile muss man "ESC K + n1 + n2" an den Drucker schicken.
1x8 Pixel werden als Byte kodiert - das heißt pro Zeile max 166 Byte

Ja, das ist mir alles noch von früher geläufig.

darum versteh ich nicht, warum man n1 und n2 braucht. n1 könnte ja eigentlich schon die max Länge sein von 166 kodieren!
aber vll ist das im Protokoll einfach so definiert und ich setze n2 einfach auf 0?

Genau richtig. Das Protokoll lässt prinzipiell auch mehr als 166 Bytes in einem Rutsch zu, auch wenn das dein Drucker nicht kann.

ich will volle Zeilenbreite (166) - also schick ich:
ESC K 166 0 166Bytes

Ja. Nur dass du die Zahlen 166 und 0 nicht als Ziffernfolge schicken darfst, sondern als Einzelzeichen mit den entsprechenden Codes. Als Hexdump würde dein String also so aussehen:

1B 4B A6 00 XX XX XX XX ... XX XX

Dabei ist 0x1B der Code für das Steuerzeichen ESC, 0x4B ist der Großbuchstabe K, 0xA6 und 0x00 sind zusammen die Längenangabe, und die XX stehen stellvertretend für die eigentlichen Grafikdaten. Vermutlich musst du am Ende der Zeile noch einen Umbruch (CR/LF) notieren.

So long,
 Martin

--
Ich bin 30. Ich demensiere apokalyptisch.
  (Orlando)
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(