pyren/pyren3/bus_playback.py
2024-05-01 12:57:36 +03:00

94 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
import sys, os, argparse
import mod_globals
os.chdir(os.path.dirname(os.path.realpath(sys.argv[0])))
import mod_elm
parser = argparse.ArgumentParser(
version="bus_playback Version 0.1",
description = "bus_playback - playing back logs written by bus_monitor.py"
)
parser.add_argument('-p',
help="ELM327 com port name (or BT mac addr e.g 24:42:16:08:00:00)",
dest="port",
default="")
parser.add_argument("-r",
help="com port rate during diagnostic session {38400[default],57600,115200,230400,500000}",
dest="rate",
default="38400",)
parser.add_argument("--log",
help="log file name",
dest="logfile",
default="")
parser.add_argument(
'log',
help='the log file name to be played back')
options = parser.parse_args()
if not options.port:
parser.print_help()
try:
from serial.tools import list_ports
except ImportError as e:
print("WARNING:", e, file=sys.stderr)
exit(-1)
print("\nAvailable COM ports:")
for port, desc, hwid in sorted(list(list_ports.comports())):
print("%-30s \n\tdesc: %s \n\thwid: %s" % (port, desc, hwid))
print("")
exit(2)
mod_globals.opt_port = options.port
mod_globals.opt_rate = int(options.rate)
mod_globals.opt_log = options.logfile
try:
playbackfile = open(options.log)
except IOError as e:
print("ERROR:", e, file=sys.stderr)
exit(2)
print('Opening ELM')
elm = mod_elm.ELM(mod_globals.opt_port, mod_globals.opt_speed, mod_globals.opt_log )
if mod_globals.opt_speed < mod_globals.opt_rate:
elm.port.soft_boudrate( mod_globals.opt_rate)
print('Init ELM')
print(elm.cmd("at z"))
#print elm.cmd("at ws")
print(elm.cmd("at d1"))
print(elm.cmd("at h1"))
print(elm.cmd("at al"))
print(elm.cmd("at at 0"))
print(elm.cmd("at st 10"))
print(elm.cmd("at r 0"))
print(elm.cmd("at cea"))
print(elm.cmd("at sp 6"))
print(elm.cmd("at al"))
print(elm.cmd("at caf 0"))
print(elm.cmd("at v1"))
print(elm.cmd("at bi"))
print('Playing data back...')
for n, line in enumerate(open(options.log)):
t, _, addr, len, data = line.split(None,4)
data = data.split(None, 8)
print(elm.cmd("at sh %s" % addr))
print(elm.cmd(''.join(data[:8])))
playbackfile.close()