to memory options: if raw_data[9] == 0x00: print('Device ID: Models TI1 and TI2 (impact DI/thermal CR)') elif raw_data[9] == 0x01: print('Device ID: Models TI3, TI4, TI8, TI9, TG3, and TG4 (high speed; impact DI/thermal CR)') elif raw_data[9] == 0x02: print('Device ID: Models TI3, TI4, TG3, and TG4 with the 2MB option') elif raw_data[9] == 0x03: print('Device ID: Models TF6 and TM6 (512K; thermal CR)') elif raw_data[9] == 0x04: print('Device ID: Models TI3, TI4, TG3, and TG4 with the 8MB option') elif raw_data[9] == 0x05: print('Device ID: Models TF6 and TM6 with the 8MB option') elif raw_data[9] == 0x06: print('Reserved (0x06)') elif raw_data[9] == 0x07: print('Models TF6 and TM6 with the 2MB option') # bytes 11 and 12 indicate individual features like presence of MICR-reader, check flipper, emulation or two-color mode etc. # byte 13 contains the microcode level, which is always referred to in hexadecimal notation: print('Printer microcode level: {:02X}'.format(raw_data[12])) For a TF6-model, the output looks like this: Message length: 15 Type: non-Tx8/Tx9 model, or Tx8/Tx9 in TI4 emulation mode Device ID: Models TF6 and TM6 (512K; thermal CR) Printer microcode level: 44 References 4610