mirror of
https://github.com/GiggioG/thermal-printer.git
synced 2026-06-15 18:50:18 +00:00
begin documenting the project, README
This commit is contained in:
86
reverse_engineering/decode.py
Normal file
86
reverse_engineering/decode.py
Normal file
@@ -0,0 +1,86 @@
|
||||
import os
|
||||
from PIL import Image
|
||||
import sys
|
||||
import glob
|
||||
|
||||
os.makedirs("decodedImg", exist_ok=True)
|
||||
|
||||
for in_file in glob.glob("data/data*.txt"):
|
||||
cmds = []
|
||||
with open(in_file, "r") as file:
|
||||
data = file.read().split('\n')
|
||||
data = [d.strip() for d in data if len(d)>0]
|
||||
binary = []
|
||||
for d in data:
|
||||
binary.extend(bytes.fromhex(d))
|
||||
|
||||
idx = -1
|
||||
data = []
|
||||
cmdCode = 0x00
|
||||
dataLen = 0
|
||||
crc = 0x00
|
||||
for i, b in enumerate(binary):
|
||||
idx += 1
|
||||
#print(i, idx, hex(b))
|
||||
if b == 0x51 and idx == 0:
|
||||
pass
|
||||
elif b == 0x78 and idx == 1:
|
||||
pass
|
||||
elif idx == 2:
|
||||
cmdCode = b
|
||||
elif b == 0x00 and idx == 3:
|
||||
pass
|
||||
elif idx == 4:
|
||||
dataLen = b
|
||||
elif idx == 5:
|
||||
if b != 0:
|
||||
dataLen = dataLen*0x100 + b
|
||||
elif idx >= 6 and idx < 6+dataLen:
|
||||
data.append(b)
|
||||
elif idx == 6+dataLen:
|
||||
crc = b
|
||||
elif idx == 6+dataLen+1 and b == 0xFF:
|
||||
o = {
|
||||
"cmd": cmdCode,
|
||||
"data": data,
|
||||
"crc": crc
|
||||
}
|
||||
cmds.append(o)
|
||||
idx = -1
|
||||
crc = 0
|
||||
data = []
|
||||
cmdCode = 0
|
||||
else:
|
||||
idx = -1
|
||||
crc = 0
|
||||
data = []
|
||||
cmdCode = 0
|
||||
#print(cmds)
|
||||
#for c in cmds:
|
||||
# print(hex(c["cmd"]), hex(len(c["data"])), hex(c["crc"]))
|
||||
|
||||
rows = []
|
||||
for c in cmds:
|
||||
if c["cmd"] == 0xa2:
|
||||
s = "".join([bin(b)[2:10].zfill(8)[::-1] for b in c["data"]])
|
||||
row = [int(x)==1 for x in s]
|
||||
rows.append(row)
|
||||
elif c["cmd"] == 0xbf:
|
||||
row = []
|
||||
for b in c["data"]:
|
||||
bit = (b & (1<<7)) == 128
|
||||
times = b & ~(1<<7)
|
||||
row.extend([bit] * times)
|
||||
rows.append(row)
|
||||
|
||||
HEIGHT = len(rows)
|
||||
WIDTH = max(len(r) for r in rows)
|
||||
|
||||
img = Image.new("1", (WIDTH, HEIGHT))
|
||||
for y in range(HEIGHT):
|
||||
for x in range(WIDTH):
|
||||
img.putpixel((x,y), not rows[y][x])
|
||||
|
||||
base = in_file.split('\\')[-1].split('.')[0] # Get base name without extension
|
||||
output_file = f"decodedImg/{base}.png"
|
||||
img.save(output_file)
|
||||
Reference in New Issue
Block a user