From a0d9f5edae60e9aa6bcbfda94a0d35bb72b81521 Mon Sep 17 00:00:00 2001 From: Trygve Date: Sat, 9 Apr 2022 23:51:47 +0200 Subject: [PATCH] La til live mtr simulator. --- utilities/create_virt_serial.sh | 3 ++ utilities/mtr_sim.py | 76 +++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 utilities/create_virt_serial.sh create mode 100644 utilities/mtr_sim.py diff --git a/utilities/create_virt_serial.sh b/utilities/create_virt_serial.sh new file mode 100644 index 0000000..89d181f --- /dev/null +++ b/utilities/create_virt_serial.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +socat -d -d pty,rawer,b9600 pty,rawer,b9600 diff --git a/utilities/mtr_sim.py b/utilities/mtr_sim.py new file mode 100644 index 0000000..a143de9 --- /dev/null +++ b/utilities/mtr_sim.py @@ -0,0 +1,76 @@ +import argparse +import serial +import otime +from rich import inspect +def main(): + global package_n + package_n = 0 + argparser = argparse.ArgumentParser( + description=("Acts as a live mtr reading data line by line from a log file and sending them over serial")) + argparser.add_argument('port', help='Serial port identifier') + argparser.add_argument( + '-f', '--file', + help=( + "Mtr log file to use")) + argparser.add_argument( + '-v', '--verbose', action='store_true', help='Verbose output') + args = argparser.parse_args() + + port = serial.Serial(port=args.port, baudrate=9600) + event = otime.event(0, 'NoName') + event.import_mtr_file(args.file) + + for card in event.card_punches: + input('Press enter to send next card') + if args.verbose == True: + inspect(card) + data = card_to_bytes(card) + port.write(data) + +def card_to_bytes(card): + global package_n + package_n += 1 + msg = b'\xFF\xFF\xFF\xFF\xE6\x4D\x9C\x3E' + year = int(str(card.read_time.year)[2:4]) + month = card.read_time.month + day = card.read_time.day + hour = card.read_time.hour + minute = card.read_time.minute + second = card.read_time.second + msg += year.to_bytes(1, byteorder='little') + msg += month.to_bytes(1, byteorder='little') + msg += day.to_bytes(1, byteorder='little') + msg += hour.to_bytes(1, byteorder='little') + msg += minute.to_bytes(1, byteorder='little') + msg += second.to_bytes(1, byteorder='little') + #ms + msg += b'\x00\x00' + + msg += package_n.to_bytes(4, byteorder='little') + msg += card.card.to_bytes(3, byteorder='little') + + # Gidder ikke å finne ut hva Producweek Producyear er + msg += b'\x00\x00' + + # Hopper overogså over ECardHeadSum + msg += b'\x00' + + for n in range(50): + try: + control = card.controls[n] + split = card.splits[n] + except: + control = 0 + split = 0 + msg += control.to_bytes(1, byteorder='little') + msg += split.to_bytes(2, byteorder='little') + # 56 byte string + msg += int(0).to_bytes(56, byteorder='little') + # Checksum + csum = sum(msg) % 256 + msg += csum.to_bytes(1, byteorder='little') + msg += b'\x00' + return msg + +if __name__ == '__main__': + main()