Make the structure of the ESC/POS commands less opaque
(The commands are intended to be readable by people who grew up with ANSI escape codes so represent them that way in the code)
This commit is contained in:
parent
9159aafd18
commit
4e1f9db5c7
|
@ -10,87 +10,127 @@ moved to `capabilities` as in `escpos-php by @mike42 <https://github.com/mike42/
|
|||
:license: GNU GPL v3
|
||||
"""
|
||||
|
||||
# Control characters
|
||||
# as labelled in http://www.novopos.ch/client/EPSON/TM-T20/TM-T20_eng_qr.pdf
|
||||
NUL = '\x00'
|
||||
EOT = '\x04'
|
||||
ENQ = '\x05'
|
||||
DLE = '\x10'
|
||||
DC4 = '\x14'
|
||||
CAN = '\x18'
|
||||
ESC = '\x1b'
|
||||
FS = '\x1c'
|
||||
GS = '\x1d'
|
||||
|
||||
# Feed control sequences
|
||||
CTL_LF = '\x0a' # Print and line feed
|
||||
CTL_FF = '\x0c' # Form feed
|
||||
CTL_CR = '\x0d' # Carriage return
|
||||
CTL_HT = '\x09' # Horizontal tab
|
||||
CTL_SET_HT = '\x1b\x44' # Set horizontal tab positions
|
||||
CTL_VT = '\x1b\x64\x04' # Vertical tab
|
||||
CTL_LF = '\n' # Print and line feed
|
||||
CTL_FF = '\f' # Form feed
|
||||
CTL_CR = '\r' # Carriage return
|
||||
CTL_HT = '\t' # Horizontal tab
|
||||
CTL_SET_HT = ESC + '\x44' # Set horizontal tab positions
|
||||
CTL_VT = '\v' # Vertical tab
|
||||
|
||||
# Printer hardware
|
||||
HW_INIT = '\x1b\x40' # Clear data in buffer and reset modes
|
||||
HW_SELECT = '\x1b\x3d\x01' # Printer select
|
||||
HW_RESET = '\x1b\x3f\x0a\x00' # Reset printer hardware
|
||||
# Cash Drawer
|
||||
CD_KICK_2 = '\x1b\x70\x00' # Sends a pulse to pin 2 []
|
||||
CD_KICK_5 = '\x1b\x70\x01' # Sends a pulse to pin 5 []
|
||||
# Paper
|
||||
PAPER_FULL_CUT = '\x1d\x56\x00' # Full cut paper
|
||||
PAPER_PART_CUT = '\x1d\x56\x01' # Partial cut paper
|
||||
HW_INIT = ESC + '@' # Clear data in buffer and reset modes
|
||||
HW_SELECT = ESC + '=\x01' # Printer select
|
||||
|
||||
HW_RESET = ESC + '\x3f\x0a\x00' # Reset printer hardware
|
||||
# (TODO: Where is this specified?)
|
||||
|
||||
# Cash Drawer (ESC p <pin> <on time: 2*ms> <off time: 2*ms>)
|
||||
_CASH_DRAWER = lambda m, t1='', t2='': ESC + 'p' + m + t1 + t2
|
||||
CD_KICK_2 = _CASH_DRAWER('\x00') # Sends a pulse to pin 2 []
|
||||
CD_KICK_5 = _CASH_DRAWER('\x01') # Sends a pulse to pin 5 []
|
||||
|
||||
# Paper Cutter
|
||||
_CUT_PAPER = lambda m: GS + 'V' + m
|
||||
PAPER_FULL_CUT = _CUT_PAPER('\x00') # Full cut paper
|
||||
PAPER_PART_CUT = _CUT_PAPER('\x01') # Partial cut paper
|
||||
|
||||
# Text format
|
||||
TXT_NORMAL = '\x1b\x21\x00' # Normal text
|
||||
TXT_2HEIGHT = '\x1b\x21\x10' # Double height text
|
||||
TXT_2WIDTH = '\x1b\x21\x20' # Double width text
|
||||
TXT_4SQUARE = '\x1b\x21\x30' # Quad area text
|
||||
TXT_UNDERL_OFF = '\x1b\x2d\x00' # Underline font OFF
|
||||
TXT_UNDERL_ON = '\x1b\x2d\x01' # Underline font 1-dot ON
|
||||
TXT_UNDERL2_ON = '\x1b\x2d\x02' # Underline font 2-dot ON
|
||||
TXT_BOLD_OFF = '\x1b\x45\x00' # Bold font OFF
|
||||
TXT_BOLD_ON = '\x1b\x45\x01' # Bold font ON
|
||||
TXT_FONT_A = '\x1b\x4d\x00' # Font type A
|
||||
TXT_FONT_B = '\x1b\x4d\x01' # Font type B
|
||||
TXT_ALIGN_LT = '\x1b\x61\x00' # Left justification
|
||||
TXT_ALIGN_CT = '\x1b\x61\x01' # Centering
|
||||
TXT_ALIGN_RT = '\x1b\x61\x02' # Right justification
|
||||
# TODO: Acquire the "ESC/POS Application Programming Guide for Paper Roll
|
||||
# Printers" and tidy up this stuff too.
|
||||
TXT_NORMAL = ESC + '!\x00' # Normal text
|
||||
TXT_2HEIGHT = ESC + '!\x10' # Double height text
|
||||
TXT_2WIDTH = ESC + '!\x20' # Double width text
|
||||
TXT_4SQUARE = ESC + '!\x30' # Quad area text
|
||||
TXT_UNDERL_OFF = ESC + '\x2d\x00' # Underline font OFF
|
||||
TXT_UNDERL_ON = ESC + '\x2d\x01' # Underline font 1-dot ON
|
||||
TXT_UNDERL2_ON = ESC + '\x2d\x02' # Underline font 2-dot ON
|
||||
TXT_BOLD_OFF = ESC + '\x45\x00' # Bold font OFF
|
||||
TXT_BOLD_ON = ESC + '\x45\x01' # Bold font ON
|
||||
TXT_FONT_A = ESC + '\x4d\x00' # Font type A
|
||||
TXT_FONT_B = ESC + '\x4d\x01' # Font type B
|
||||
TXT_ALIGN_LT = ESC + '\x61\x00' # Left justification
|
||||
TXT_ALIGN_CT = ESC + '\x61\x01' # Centering
|
||||
TXT_ALIGN_RT = ESC + '\x61\x02' # Right justification
|
||||
|
||||
# Char code table
|
||||
CHARCODE_PC437 = '\x1b\x74\x00' # USA: Standard Europe
|
||||
CHARCODE_JIS = '\x1b\x74\x01' # Japanese Katakana
|
||||
CHARCODE_PC850 = '\x1b\x74\x02' # Multilingual
|
||||
CHARCODE_PC860 = '\x1b\x74\x03' # Portuguese
|
||||
CHARCODE_PC863 = '\x1b\x74\x04' # Canadian-French
|
||||
CHARCODE_PC865 = '\x1b\x74\x05' # Nordic
|
||||
CHARCODE_WEU = '\x1b\x74\x06' # Simplified Kanji, Hirakana
|
||||
CHARCODE_GREEK = '\x1b\x74\x07' # Simplified Kanji
|
||||
CHARCODE_HEBREW = '\x1b\x74\x08' # Simplified Kanji
|
||||
CHARCODE_PC1252 = '\x1b\x74\x11' # Western European Windows Code Set
|
||||
CHARCODE_PC866 = '\x1b\x74\x12' # Cirillic #2
|
||||
CHARCODE_PC852 = '\x1b\x74\x13' # Latin 2
|
||||
CHARCODE_PC858 = '\x1b\x74\x14' # Euro
|
||||
CHARCODE_THAI42 = '\x1b\x74\x15' # Thai character code 42
|
||||
CHARCODE_THAI11 = '\x1b\x74\x16' # Thai character code 11
|
||||
CHARCODE_THAI13 = '\x1b\x74\x17' # Thai character code 13
|
||||
CHARCODE_THAI14 = '\x1b\x74\x18' # Thai character code 14
|
||||
CHARCODE_THAI16 = '\x1b\x74\x19' # Thai character code 16
|
||||
CHARCODE_THAI17 = '\x1b\x74\x1a' # Thai character code 17
|
||||
CHARCODE_THAI18 = '\x1b\x74\x1b' # Thai character code 18
|
||||
CHARCODE_PC437 = ESC + '\x74\x00' # USA: Standard Europe
|
||||
CHARCODE_JIS = ESC + '\x74\x01' # Japanese Katakana
|
||||
CHARCODE_PC850 = ESC + '\x74\x02' # Multilingual
|
||||
CHARCODE_PC860 = ESC + '\x74\x03' # Portuguese
|
||||
CHARCODE_PC863 = ESC + '\x74\x04' # Canadian-French
|
||||
CHARCODE_PC865 = ESC + '\x74\x05' # Nordic
|
||||
CHARCODE_WEU = ESC + '\x74\x06' # Simplified Kanji, Hirakana
|
||||
CHARCODE_GREEK = ESC + '\x74\x07' # Simplified Kanji
|
||||
CHARCODE_HEBREW = ESC + '\x74\x08' # Simplified Kanji
|
||||
CHARCODE_PC1252 = ESC + '\x74\x11' # Western European Windows Code Set
|
||||
CHARCODE_PC866 = ESC + '\x74\x12' # Cirillic #2
|
||||
CHARCODE_PC852 = ESC + '\x74\x13' # Latin 2
|
||||
CHARCODE_PC858 = ESC + '\x74\x14' # Euro
|
||||
CHARCODE_THAI42 = ESC + '\x74\x15' # Thai character code 42
|
||||
CHARCODE_THAI11 = ESC + '\x74\x16' # Thai character code 11
|
||||
CHARCODE_THAI13 = ESC + '\x74\x17' # Thai character code 13
|
||||
CHARCODE_THAI14 = ESC + '\x74\x18' # Thai character code 14
|
||||
CHARCODE_THAI16 = ESC + '\x74\x19' # Thai character code 16
|
||||
CHARCODE_THAI17 = ESC + '\x74\x1a' # Thai character code 17
|
||||
CHARCODE_THAI18 = ESC + '\x74\x1b' # Thai character code 18
|
||||
|
||||
# Barcode format
|
||||
BARCODE_TXT_OFF = '\x1d\x48\x00' # HRI barcode chars OFF
|
||||
BARCODE_TXT_ABV = '\x1d\x48\x01' # HRI barcode chars above
|
||||
BARCODE_TXT_BLW = '\x1d\x48\x02' # HRI barcode chars below
|
||||
BARCODE_TXT_BTH = '\x1d\x48\x03' # HRI barcode chars both above and below
|
||||
BARCODE_FONT_A = '\x1d\x66\x00' # Font type A for HRI barcode chars
|
||||
BARCODE_FONT_B = '\x1d\x66\x01' # Font type B for HRI barcode chars
|
||||
BARCODE_HEIGHT = '\x1d\x68\x64' # Barcode Height [1-255]
|
||||
BARCODE_WIDTH = '\x1d\x77\x03' # Barcode Width [2-6]
|
||||
BARCODE_UPC_A = '\x1d\x6b\x00' # Barcode type UPC-A
|
||||
BARCODE_UPC_E = '\x1d\x6b\x01' # Barcode type UPC-E
|
||||
BARCODE_EAN13 = '\x1d\x6b\x02' # Barcode type EAN13
|
||||
BARCODE_EAN8 = '\x1d\x6b\x03' # Barcode type EAN8
|
||||
BARCODE_CODE39 = '\x1d\x6b\x04' # Barcode type CODE39
|
||||
BARCODE_ITF = '\x1d\x6b\x05' # Barcode type ITF
|
||||
BARCODE_NW7 = '\x1d\x6b\x06' # Barcode type NW7
|
||||
_SET_BARCODE_TXT_POS = lambda n: GS + 'H' + n
|
||||
BARCODE_TXT_OFF = _SET_BARCODE_TXT_POS('\x00') # HRI barcode chars OFF
|
||||
BARCODE_TXT_ABV = _SET_BARCODE_TXT_POS('\x01') # HRI barcode chars above
|
||||
BARCODE_TXT_BLW = _SET_BARCODE_TXT_POS('\x02') # HRI barcode chars below
|
||||
BARCODE_TXT_BTH = _SET_BARCODE_TXT_POS('\x03') # HRI both above and below
|
||||
|
||||
_SET_HRI_FONT = lambda n: GS + 'f' + n
|
||||
BARCODE_FONT_A = _SET_HRI_FONT('\x00') # Font type A for HRI barcode chars
|
||||
BARCODE_FONT_B = _SET_HRI_FONT('\x01') # Font type B for HRI barcode chars
|
||||
|
||||
BARCODE_HEIGHT = GS + 'h' + '\x64' # Barcode Height [1-255]
|
||||
BARCODE_WIDTH = GS + 'w' + '\x03' # Barcode Width [2-6]
|
||||
|
||||
#NOTE: This isn't actually an ESC/POS command. It's the common prefix to the
|
||||
# two "print bar code" commands:
|
||||
# - "GS k <type as integer> <data> NUL"
|
||||
# - "GS k <type as letter> <data length> <data>"
|
||||
# The latter command supports more barcode types
|
||||
_SET_BARCODE_TYPE = lambda m: GS + 'k' + m
|
||||
BARCODE_UPC_A = _SET_BARCODE_TYPE('\x00') # Barcode type UPC-A
|
||||
BARCODE_UPC_E = _SET_BARCODE_TYPE('\x01') # Barcode type UPC-E
|
||||
BARCODE_EAN13 = _SET_BARCODE_TYPE('\x02') # Barcode type EAN13
|
||||
BARCODE_EAN8 = _SET_BARCODE_TYPE('\x03') # Barcode type EAN8
|
||||
BARCODE_CODE39 = _SET_BARCODE_TYPE('\x04') # Barcode type CODE39
|
||||
BARCODE_ITF = _SET_BARCODE_TYPE('\x05') # Barcode type ITF
|
||||
BARCODE_NW7 = _SET_BARCODE_TYPE('\x06') # Barcode type NW7
|
||||
|
||||
# Image format
|
||||
S_RASTER_N = '\x1d\x76\x30\x00' # Set raster image normal size
|
||||
S_RASTER_2W = '\x1d\x76\x30\x01' # Set raster image double width
|
||||
S_RASTER_2H = '\x1d\x76\x30\x02' # Set raster image double height
|
||||
S_RASTER_Q = '\x1d\x76\x30\x03' # Set raster image quadruple
|
||||
# NOTE: _PRINT_RASTER_IMG is the obsolete ESC/POS "print raster bit image"
|
||||
# command. The constants include a fragment of the data's header.
|
||||
_PRINT_RASTER_IMG = lambda data: GS + 'v0' + data
|
||||
S_RASTER_N = _PRINT_RASTER_IMG('\x00') # Set raster image normal size
|
||||
S_RASTER_2W = _PRINT_RASTER_IMG('\x01') # Set raster image double width
|
||||
S_RASTER_2H = _PRINT_RASTER_IMG('\x02') # Set raster image double height
|
||||
S_RASTER_Q = _PRINT_RASTER_IMG('\x03') # Set raster image quadruple
|
||||
|
||||
# Printing Density
|
||||
PD_N50 = '\x1d\x7c\x00' # Printing Density -50%
|
||||
PD_N37 = '\x1d\x7c\x01' # Printing Density -37.5%
|
||||
PD_N25 = '\x1d\x7c\x02' # Printing Density -25%
|
||||
PD_N12 = '\x1d\x7c\x03' # Printing Density -12.5%
|
||||
PD_0 = '\x1d\x7c\x04' # Printing Density 0%
|
||||
PD_P50 = '\x1d\x7c\x08' # Printing Density +50%
|
||||
PD_P37 = '\x1d\x7c\x07' # Printing Density +37.5%
|
||||
PD_P25 = '\x1d\x7c\x06' # Printing Density +25%
|
||||
PD_P12 = '\x1d\x7c\x05' # Printing Density +12.5%
|
||||
PD_N50 = GS + '\x7c\x00' # Printing Density -50%
|
||||
PD_N37 = GS + '\x7c\x01' # Printing Density -37.5%
|
||||
PD_N25 = GS + '\x7c\x02' # Printing Density -25%
|
||||
PD_N12 = GS + '\x7c\x03' # Printing Density -12.5%
|
||||
PD_0 = GS + '\x7c\x04' # Printing Density 0%
|
||||
PD_P50 = GS + '\x7c\x08' # Printing Density +50%
|
||||
PD_P37 = GS + '\x7c\x07' # Printing Density +37.5%
|
||||
PD_P25 = GS + '\x7c\x06' # Printing Density +25%
|
||||
PD_P12 = GS + '\x7c\x05' # Printing Density +12.5%
|
||||
|
|
Loading…
Reference in New Issue