"""Establish serial communication with MultispeQ device."""importserialfromtabulateimporttabulateimportserial.tools.list_portsaslist_ports
[docs]defconnect(port=None,baudrate=115200,timeout=None):""" Connect a MultspeQ device to a serial port. :param port: Port the MultisepQ is connected to. :type port: str :param baudrate: Set the baudrate. Default is 115,200. :type baudrate: int :param timeout: Set the timeout. Derault is 0.01 :type timeout: float :return: Serial connection or None if connection fails. :rtype: serial :raises ValueError: if port is not defined :raises ValueError: if port is not provided as a string :raises ValueError: if baudrate is not defined or provided as an integer :raises ValueError: if timeout is not provided as a float :raises SerialExeption: if device is not connected """ifportisNone:raiseValueError("No port is provided")ifnotisinstance(port,str):raiseValueError("The port name needs to be a string")ifbaudrateisNoneornotisinstance(baudrate,int):raiseValueError("The baudrate needs to be defined and provided as an integer")ifnottimeoutisNoneandnotisinstance(timeout,float):raiseValueError("Timeout needs to be defined as a float")connection=serial.Serial(port=port,baudrate=baudrate,timeout=timeout)ifnotconnection.is_open:raiseserial.SerialException("Device not connected")print("Connected Opened")returnconnection
[docs]defdisconnect(connection=None):""" Disconnect device from serial port. :param connection: Connection to the MultispeQ. :type connection: serial :return: None """ifconnection.is_open:connection.close()print("Connection closed")else:print("Connection already closed")returnNone
[docs]defget_ports():""" List available serial ports. :return: None """ports=[]forpinlist_ports.comports():ports.append([p.device,p.name,p.description,p.manufacturer,p.product])output=tabulate(ports,headers=['Port','Name','Description','Manufacturer','Product'])print(output)returnNone