add option for naming
This commit is contained in:
		
							parent
							
								
									f835556acf
								
							
						
					
					
						commit
						88da9c0ae1
					
				
					 2 changed files with 39 additions and 34 deletions
				
			
		| 
						 | 
					@ -6,8 +6,12 @@ import re
 | 
				
			||||||
import serial.tools.list_ports
 | 
					import serial.tools.list_ports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def list_USB_devices():
 | 
					def list_USB_devices(full=True):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					    Return a list of USB devices as a dict.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if full is True, the name is Manufacturer_SerialNumber
 | 
				
			||||||
 | 
					    otherwise, just Manufacturer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    full_pattern = re.compile('[^a-zA-Z0-9\\\/]|_')
 | 
					    full_pattern = re.compile('[^a-zA-Z0-9\\\/]|_')
 | 
				
			||||||
| 
						 | 
					@ -16,45 +20,45 @@ def list_USB_devices():
 | 
				
			||||||
    for p in ports:
 | 
					    for p in ports:
 | 
				
			||||||
        if p.manufacturer:
 | 
					        if p.manufacturer:
 | 
				
			||||||
            key = p.manufacturer
 | 
					            key = p.manufacturer
 | 
				
			||||||
            if p.serial_number:
 | 
					            if p.serial_number and full:
 | 
				
			||||||
                key += '_' + p.serial_number
 | 
					                key += '_' + p.serial_number
 | 
				
			||||||
            key = re.sub(full_pattern, '_', key)
 | 
					            key = re.sub(full_pattern, '_', key)
 | 
				
			||||||
            result[key] = p.device
 | 
					            result[key] = p.device
 | 
				
			||||||
    return result
 | 
					    return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def list_USB_devices_old():
 | 
					#def list_USB_devices_old():
 | 
				
			||||||
    result = {}
 | 
					#    result = {}
 | 
				
			||||||
    path = Path('/sys/bus/usb/devices/')
 | 
					#    path = Path('/sys/bus/usb/devices/')
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
    for syspath in path.glob('usb*'):
 | 
					#    for syspath in path.glob('usb*'):
 | 
				
			||||||
        for devfile in syspath.glob('**/dev'):
 | 
					#        for devfile in syspath.glob('**/dev'):
 | 
				
			||||||
            if devfile.is_file():
 | 
					#            if devfile.is_file():
 | 
				
			||||||
                devpath = devfile.parent
 | 
					#                devpath = devfile.parent
 | 
				
			||||||
                # Get devnames
 | 
					#                # Get devnames
 | 
				
			||||||
                proc = subprocess.Popen(['udevadm', 'info', '-q', 'name', '-p', devpath],
 | 
					#                proc = subprocess.Popen(['udevadm', 'info', '-q', 'name', '-p', devpath],
 | 
				
			||||||
                                        stdout=subprocess.PIPE)
 | 
					#                                        stdout=subprocess.PIPE)
 | 
				
			||||||
                output = proc.stdout.read()
 | 
					#                output = proc.stdout.read()
 | 
				
			||||||
                devname = output.decode('utf-8')
 | 
					#                devname = output.decode('utf-8')
 | 
				
			||||||
                if not devname.startswith('bus') and not devname.startswith('input'):
 | 
					#                if not devname.startswith('bus') and not devname.startswith('input'):
 | 
				
			||||||
                    # get properties
 | 
					#                    # get properties
 | 
				
			||||||
                    proc = subprocess.Popen(['udevadm', 'info', '-q', 'property', '--export', '-p', devpath],
 | 
					#                    proc = subprocess.Popen(['udevadm', 'info', '-q', 'property', '--export', '-p', devpath],
 | 
				
			||||||
                                            stdout=subprocess.PIPE)
 | 
					#                                            stdout=subprocess.PIPE)
 | 
				
			||||||
                    output = proc.stdout.read()
 | 
					#                    output = proc.stdout.read()
 | 
				
			||||||
                    output = output.decode('utf-8')
 | 
					#                    output = output.decode('utf-8')
 | 
				
			||||||
                    # Not nice, but convert the output into dict
 | 
					#                    # Not nice, but convert the output into dict
 | 
				
			||||||
                    output = output.replace("='", "\':\'")
 | 
					#                    output = output.replace("='", "\':\'")
 | 
				
			||||||
                    output = re.sub('^', "\'", output, flags=re.MULTILINE)
 | 
					#                    output = re.sub('^', "\'", output, flags=re.MULTILINE)
 | 
				
			||||||
                    output = '{' + output[:-1].replace('\n', ', ') + '}'
 | 
					#                    output = '{' + output[:-1].replace('\n', ', ') + '}'
 | 
				
			||||||
                    properties = ast.literal_eval(output)
 | 
					#                    properties = ast.literal_eval(output)
 | 
				
			||||||
                    if 'ID_SERIAL' in properties:
 | 
					#                    if 'ID_SERIAL' in properties:
 | 
				
			||||||
                        p = str(path.joinpath('/dev', devname))
 | 
					#                        p = str(path.joinpath('/dev', devname))
 | 
				
			||||||
                        p = p.replace('\n', '')
 | 
					#                        p = p.replace('\n', '')
 | 
				
			||||||
                        result[properties['ID_SERIAL']] = p
 | 
					#                        result[properties['ID_SERIAL']] = p
 | 
				
			||||||
    return result
 | 
					#    return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def update_USB_devices(devices):
 | 
					def update_USB_devices(devices, fullname=True):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    Find paths for devices.
 | 
					    Find paths for devices.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,8 +66,9 @@ def update_USB_devices(devices):
 | 
				
			||||||
    detection, and bind the path.
 | 
					    detection, and bind the path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    devices: dictionnary
 | 
					    devices: dictionnary
 | 
				
			||||||
 | 
					    fullname: if True, Manufacturer_SN, else Manufacturer.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    res = list_USB_devices()
 | 
					    res = list_USB_devices(full=fullname)
 | 
				
			||||||
    for device in devices:
 | 
					    for device in devices:
 | 
				
			||||||
        name = devices[device]['name']
 | 
					        name = devices[device]['name']
 | 
				
			||||||
        if name in res:
 | 
					        if name in res:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
__version__ = '0.1.2'
 | 
					__version__ = '0.1.3'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .LTS import *
 | 
					from .LTS import *
 | 
				
			||||||
from .USBdev import *
 | 
					from .USBdev import *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue