brotherax_teletype/tools/printfile.py

88 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#! /usr/bin/env python3
import serial
import codecs
import argparse
serialdevice='/dev/ttyUSB0'
chars=" qwertzuiopü+asdfghjklöä#yxcvbnm,.-QWERTZUIOPÜ*ASDFGHJKLÖÄ'´`YXCVBNM;:_1234567890ß!\"§$%&/()=?°²³|"
def main():
parser = argparse.ArgumentParser(description='Send Textfile over serial')
parser.add_argument('filename', help="file to print")
parser.add_argument('-d', '--device', nargs='?', help="serial device name")
parser.add_argument('-l', '--length', nargs='?', type=int, help="maximum line length")
parser.add_argument('-w', '--wait', nargs='?', type=int, help="wait after x characters")
parser.add_argument('-x','--dryrun', action="store_true", help="do not send anything to printer")
args = parser.parse_args()
charsperline=65
if args.length is not None:
charsperline=int(args.length)
print("args.length: "+str(args.length))
print("Checking for maximum line length: "+str(charsperline))
waitafter=0
if args.wait is not None:
waitafter=int(args.wait)
print("Waiting after every "+str(charsperline)+" characters sent")
filename=args.filename
if args.device is not None:
serialdevice=args.device
lines=[]
with codecs.open(filename, encoding='utf-8') as file:
lines=file.readlines()
lines=[x.rstrip() for x in lines] # remove whitespaces and linebreaks
lines=[x.replace("´", "´ ") for x in lines] # add space to chars where printer is not advancing
lines=[x.replace("`", "` ") for x in lines] # add space to chars where printer is not advancing
for iline,line in enumerate(lines):
if not set(line).issubset(chars+'\\'):
print(str(iline)+":"+str(line))
print("Contains non printable characters")
exit()
if len(line)>charsperline:
print(str(iline)+":"+str(line))
print("Line is too long." +str(len(line))+">"+str(charsperline))
exit()
if (args.dryrun):
print("Dry Run enabled")
with serial.Serial(serialdevice, 9600, timeout=1) as ser:
charssent=0
for iline,line in enumerate(lines):
if waitafter>0 and charssent>waitafter:
input("Press Enter to continue...")
charssent=0
print(str(iline)+"/"+str(len(lines))+" ("+str(charssent)+")"+":"+str(line))
charssent+=len(line)
if (not args.dryrun):
ser.write(line.encode())
ser.write(b'\n')
if __name__ == "__main__":
main()