Add script for controlling Nexus MCU via pexpect Change-Id: Iefbd14346288e53865291c7b871131a364728aea
diff --git a/nexus_mcu.py b/nexus_mcu.py new file mode 100755 index 0000000..b06d2e4 --- /dev/null +++ b/nexus_mcu.py
@@ -0,0 +1,46 @@ +#!/usr/bin/env python +# +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +import sys +import serial +from pexpect_serial import SerialSpawn + + +def main(): + parser = argparse.ArgumentParser(description="Run commands on nexus MCU") + parser.add_argument( + "--nexus_id", + action="store", + required=True, + help="Two digit numeric ID of the nexus board to control") + parser.add_argument("command", action='store') + args = parser.parse_args() + + fd = serial.Serial(f"/dev/Nexus-FTDI-{args.nexus_id}-MCU-UART", "115200") + port = SerialSpawn(fd) + # Redirect all port chatter to stdout buffer since it's in binary mode + port.logfile = sys.stdout.buffer + + port.send(f"{args.command}\r\n") + reply = port.expect([">", "Unrecognized command: .*\r\n>"]) + if reply: + print(f"MCU did not recognize the command \"{args.command}\"") + sys.exit(1) + + +if __name__ == "__main__": + main()
diff --git a/python-requirements.txt b/python-requirements.txt index e1f095a..5750f55 100644 --- a/python-requirements.txt +++ b/python-requirements.txt
@@ -32,8 +32,10 @@ matplotlib netifaces pandas +pexpect-serial psutil pyfzf +pyserial pyyaml requests robotframework==6.0.2