def findArduinoDevicePorts(baudrate=None, model_number=None, serial_number=None, try_ports=None, debug=DEBUG): serial_device_ports = findSerialDevicePorts(try_ports=try_ports, debug=debug) if type(model_number) is int: model_number = [model_number] if type(serial_number) is int: serial_number = [serial_number] arduino_device_ports = {} for port in serial_device_ports: try: dev = ArduinoDevice(port=port,baudrate=baudrate) try: dev_info = dev.getDevInfo() if DEBUG: print("dev_info = " + str(dev_info)) except Exception: break try: dev_model_number = dev_info['model_number'] except KeyError: break if (model_number is None ) or (dev_model_number in model_number): try: dev_serial_number = dev_info['serial_number'] except KeyError: break if (serial_number is None) or (dev_serial_number in serial_number): arduino_device_ports[port] = {'model_number': dev_model_number, 'serial_number': dev_serial_number} dev.close() except (serial.SerialException, IOError): pass return arduino_device_ports
def findAnimaticsDevicePort(baudrate): serialPortList = findSerialDevicePorts() matchingList = [] for port in serialPortList: try: dev = SerialDevice(port=port, baudrate=baudrate, timeout=0.1, write_write_delay=0.1, write_read_delay=0.1, debug=DEBUG) dev.flushInput() dev.flushOutput() dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET) + 'WAKE ', delay_write=True) time.sleep(0.1) dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET) + 'WAKE ', delay_write=True) time.sleep(0.1) dev.flushInput() dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET) + 'ECHO ', delay_write=True) dev.readlines() response = dev.writeRead(chr(MOTOR_ADDRESS_OFFSET) + 'RPI ', use_readline=False, check_write_freq=True) dev.close() # Animatics response will either be 'RPI 3.141592741 ' # or '3.141592741 ' depending on ECHO setting # Must enable ECHO so it will work when multiple motors are chained response = response.replace(chr(MOTOR_ADDRESS_OFFSET) + 'RPI ', '') if (0 < len(response)) and (response[0] == '3'): print("Found an Animatics device!") return port except serial.SerialException: pass if len(matchingList) == 0: err_str = 'Could not find Animatics device. Check connections and power or specify port.\n' err_str += 'Tried ports: ' + str(serialPortList) raise RuntimeError(err_str) elif 1 < len(matchingList): err_str = 'Found more than one Animatics device. Specify port.' err_str += 'Matching ports: ' + str(matchingList) raise RuntimeError(err_str) else: return matchingList[0]
def findArduinoDevicePort(baudrate=None, model_number=None, serial_number=None, try_ports=None, debug=DEBUG): arduino_device_ports = findArduinoDevicePorts(baudrate=baudrate, model_number=model_number, serial_number=serial_number, try_ports=try_ports, debug=debug) if len(arduino_device_ports) == 1: return arduino_device_ports.keys()[0] elif len(arduino_device_ports) == 0: serial_device_ports = findSerialDevicePorts(try_ports) err_str = 'Could not find any Arduino devices. Check connections and permissions.\n' err_str += 'Tried ports: ' + str(serial_device_ports) raise RuntimeError(err_str) else: err_str = 'Found more than one Arduino device. Specify port or model_number and/or serial_number.\n' err_str += 'Matching ports: ' + str(arduino_device_ports) raise RuntimeError(err_str)
def findAnimaticsDevicePort(baudrate): serialPortList = findSerialDevicePorts() matchingList = [] for port in serialPortList: try: dev = SerialDevice(port=port, baudrate=baudrate, timeout=0.1, write_write_delay=0.1, write_read_delay=0.1, debug=DEBUG) dev.flushInput() dev.flushOutput() dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET)+'WAKE ',delay_write=True) time.sleep(0.1) dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET)+'WAKE ',delay_write=True) time.sleep(0.1) dev.flushInput() dev.writeCheckFreq(chr(MOTOR_ADDRESS_OFFSET)+'ECHO ',delay_write=True) dev.readlines() response = dev.writeRead(chr(MOTOR_ADDRESS_OFFSET)+'RPI ',use_readline=False,check_write_freq=True) dev.close() # Animatics response will either be 'RPI 3.141592741 ' # or '3.141592741 ' depending on ECHO setting # Must enable ECHO so it will work when multiple motors are chained response = response.replace(chr(MOTOR_ADDRESS_OFFSET)+'RPI ','') if (0 < len(response)) and (response[0] == '3'): print("Found an Animatics device!") return port except serial.SerialException: pass if len(matchingList) == 0: err_str = 'Could not find Animatics device. Check connections and power or specify port.\n' err_str += 'Tried ports: ' + str(serialPortList) raise RuntimeError(err_str) elif 1 < len(matchingList): err_str = 'Found more than one Animatics device. Specify port.' err_str += 'Matching ports: ' + str(matchingList) raise RuntimeError(err_str) else: return matchingList[0]
def findArduinoDevicePorts(baudrate=None, model_number=None, serial_number=None, try_ports=None, debug=DEBUG): serial_device_ports = findSerialDevicePorts(try_ports=try_ports, debug=debug) if type(model_number) is int: model_number = [model_number] if type(serial_number) is int: serial_number = [serial_number] arduino_device_ports = {} for port in serial_device_ports: try: dev = ArduinoDevice(port=port, baudrate=baudrate) try: dev_info = dev.getDevInfo() if DEBUG: print("dev_info = " + str(dev_info)) except Exception: break try: dev_model_number = dev_info['model_number'] except KeyError: break if (model_number is None) or (dev_model_number in model_number): try: dev_serial_number = dev_info['serial_number'] except KeyError: break if (serial_number is None) or (dev_serial_number in serial_number): arduino_device_ports[port] = { 'model_number': dev_model_number, 'serial_number': dev_serial_number } dev.close() except (serial.SerialException, IOError): pass return arduino_device_ports