blob: 97ad9f26d9d175814d3c0a106abccdf5f8d6a8a0 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright(c) 2022 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
import os
import logging
import time
import argparse
import socket
import signal
HOST = None
PORT_LOG = 9999
PORT_REQ = PORT_LOG + 1
BUF_SIZE = 4096
CMD_LOG_START = "start_log"
CMD_LOG_STOP = "stop_log"
CMD_DOWNLOAD = "download"
logging.basicConfig()
log = logging.getLogger("cavs-client")
log.setLevel(logging.INFO)
class cavstool_client():
def __init__(self, host, port, args):
self.host = host
self.port = port
self.args = args
self.sock = None
self.cmd = None
def send_cmd(self, cmd):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
self.sock = sock
self.cmd = cmd
self.sock.connect((self.host, self.port))
self.sock.sendall(cmd.encode("utf-8"))
log.info(f"Sent: {cmd}")
ack = str(self.sock.recv(BUF_SIZE), "utf-8")
log.info(f"Receive: {ack}")
if ack == CMD_LOG_START:
self.monitor_log()
elif ack == CMD_LOG_STOP:
log.info(f"Stop output.")
elif ack == CMD_DOWNLOAD:
self.run()
else:
log.error(f"Receive incorrect msg:{ack} expect:{cmd}")
def download(self, filename):
# Send the FW to server
with open(filename,'rb') as f:
log.info('Sending...')
ret = self.sock.sendfile(f)
log.info(f"Done Sending ({ret}).")
def run(self):
filename = str(self.args.fw_file)
send_fn = os.path.basename(filename)
self.sock.sendall(send_fn.encode("utf-8"))
log.info(f"Sent fw: {send_fn}, {filename}")
self.download(filename)
def monitor_log(self):
log.info(f"Start to monitor log output...")
while True:
# Receive data from the server and print out
receive_log = str(self.sock.recv(BUF_SIZE).strip(), "utf-8")
if receive_log:
print(f"{receive_log}")
time.sleep(0.1)
def __del__(self):
self.sock.close()
def cleanup():
client = cavstool_client(HOST, PORT_REQ, args)
client.send_cmd(CMD_LOG_STOP)
def main():
if args.log_only:
log.info("Monitor process")
signal.signal(signal.SIGTERM, cleanup)
try:
client = cavstool_client(HOST, PORT_LOG, args)
client.send_cmd(CMD_LOG_START)
except KeyboardInterrupt:
pass
finally:
cleanup()
elif args.kill_cmd:
log.info("Stop monitor log")
cleanup()
else:
log.info("Download process")
client = cavstool_client(HOST, PORT_REQ, args)
client.send_cmd(CMD_DOWNLOAD)
ap = argparse.ArgumentParser(description="DSP loader/logger client tool")
ap.add_argument("-q", "--quiet", action="store_true",
help="No loader output, just DSP logging")
ap.add_argument("-l", "--log-only", action="store_true",
help="Don't load firmware, just show log output")
ap.add_argument("-s", "--server-addr", default="localhost",
help="Specify the adsp server address")
ap.add_argument("-k", "--kill-cmd", action="store_true",
help="No current log buffer at start, just new output")
ap.add_argument("fw_file", nargs="?", help="Firmware file")
args = ap.parse_args()
if args.quiet:
log.setLevel(logging.WARN)
HOST = args.server_addr
if __name__ == "__main__":
main()