add logging option

This commit is contained in:
xenia 2021-05-12 17:55:58 -04:00
parent 9b7e96ed6b
commit 801f9eb1f7
2 changed files with 26 additions and 10 deletions

View File

@ -18,7 +18,7 @@ pip3 install --user -e .
## usage
```
usage: megacom [-h] [-b BAUD] [-m MODE] [tty]
usage: megacom [-h] [-b BAUD] [-m MODE] [-l LOGFILE] [tty]
Alternative console-based UART client
@ -29,6 +29,8 @@ optional arguments:
-h, --help show this help message and exit
-b BAUD, --baud BAUD UART baud rate [115200]
-m MODE, --mode MODE UART mode string [8N1]
-l LOGFILE, --logfile LOGFILE
file to log to
```
### sudo

View File

@ -7,7 +7,7 @@ import sys
import termios
import tty
from types import TracebackType
from typing import Any, List, Optional, Tuple, Type
from typing import Any, BinaryIO, List, Optional, Tuple, Type
from typing_extensions import Literal
import serial
@ -103,7 +103,7 @@ class KeycodeHandler:
return byte
async def megacom(tty: str, baud: int, mode: str) -> None:
async def megacom(tty: str, baud: int, mode: str, logfile: Optional[str]) -> None:
(stdin, stdout) = await setup_async()
m = MODE_RE.match(mode)
@ -114,14 +114,24 @@ async def megacom(tty: str, baud: int, mode: str) -> None:
parity = MODE_LOOKUP["parity"][m.group(2)]
stopbits = MODE_LOOKUP["stopbits"][m.group(3)]
log: Optional[BinaryIO] = None
if logfile is not None:
try:
log = open(logfile, "wb")
except Exception as e:
sys.stderr.write(f"failed to open log file: {e}\n")
sys.exit(1)
loop = asyncio.get_event_loop()
keycodes = KeycodeHandler()
return await megacom_main(stdin, stdout, tty, baud, bytesize, parity, stopbits, loop, keycodes)
return await megacom_main(stdin, stdout, tty, baud, bytesize, parity, stopbits, loop, keycodes,
log)
async def megacom_main(stdin: asyncio.StreamReader, stdout: asyncio.StreamWriter, tty: str,
baud: int, bytesize: Any, parity: Any, stopbits: Any,
loop: asyncio.AbstractEventLoop, keycodes: KeycodeHandler) -> None:
loop: asyncio.AbstractEventLoop, keycodes: KeycodeHandler,
log: Optional[BinaryIO]) -> None:
printed_fnf = False
while True:
@ -179,9 +189,11 @@ async def megacom_main(stdin: asyncio.StreamReader, stdout: asyncio.StreamWriter
c = keycodes.process(c)
if len(c) == 0:
continue
# else:
# stdout.write(f"\r\nout char: {c}\r\n".encode())
# await stdout.drain()
else:
# stdout.write(f"\r\nout char: {c}\r\n".encode())
# await stdout.drain()
if log is not None:
log.write(c)
pout.write(c)
await pout.drain()
@ -236,7 +248,7 @@ async def megacom_main(stdin: asyncio.StreamReader, stdout: asyncio.StreamWriter
if do_retry:
return await megacom_main(stdin, stdout, tty, baud, bytesize, parity, stopbits, loop,
keycodes)
keycodes, log)
def main() -> None:
@ -246,7 +258,9 @@ def main() -> None:
help="Path to UART device [/dev/ttyUSB0]")
parser.add_argument("-b", "--baud", type=int, default=115200, help="UART baud rate [115200]")
parser.add_argument("-m", "--mode", type=str, default="8N1", help="UART mode string [8N1]")
parser.add_argument("-l", "--logfile", type=str, default="", help="file to log to")
args = parser.parse_args()
with TtyRaw():
asyncio.run(megacom(args.tty, args.baud, args.mode))
asyncio.run(megacom(args.tty, args.baud, args.mode,
args.logfile if args.logfile != "" else None))