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
|
||||
|
||||
|
||||
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\\\/]|_')
|
||||
|
@ -16,45 +20,45 @@ def list_USB_devices():
|
|||
for p in ports:
|
||||
if p.manufacturer:
|
||||
key = p.manufacturer
|
||||
if p.serial_number:
|
||||
if p.serial_number and full:
|
||||
key += '_' + p.serial_number
|
||||
key = re.sub(full_pattern, '_', key)
|
||||
result[key] = p.device
|
||||
return result
|
||||
|
||||
|
||||
def list_USB_devices_old():
|
||||
result = {}
|
||||
path = Path('/sys/bus/usb/devices/')
|
||||
|
||||
for syspath in path.glob('usb*'):
|
||||
for devfile in syspath.glob('**/dev'):
|
||||
if devfile.is_file():
|
||||
devpath = devfile.parent
|
||||
# Get devnames
|
||||
proc = subprocess.Popen(['udevadm', 'info', '-q', 'name', '-p', devpath],
|
||||
stdout=subprocess.PIPE)
|
||||
output = proc.stdout.read()
|
||||
devname = output.decode('utf-8')
|
||||
if not devname.startswith('bus') and not devname.startswith('input'):
|
||||
# get properties
|
||||
proc = subprocess.Popen(['udevadm', 'info', '-q', 'property', '--export', '-p', devpath],
|
||||
stdout=subprocess.PIPE)
|
||||
output = proc.stdout.read()
|
||||
output = output.decode('utf-8')
|
||||
# Not nice, but convert the output into dict
|
||||
output = output.replace("='", "\':\'")
|
||||
output = re.sub('^', "\'", output, flags=re.MULTILINE)
|
||||
output = '{' + output[:-1].replace('\n', ', ') + '}'
|
||||
properties = ast.literal_eval(output)
|
||||
if 'ID_SERIAL' in properties:
|
||||
p = str(path.joinpath('/dev', devname))
|
||||
p = p.replace('\n', '')
|
||||
result[properties['ID_SERIAL']] = p
|
||||
return result
|
||||
#def list_USB_devices_old():
|
||||
# result = {}
|
||||
# path = Path('/sys/bus/usb/devices/')
|
||||
#
|
||||
# for syspath in path.glob('usb*'):
|
||||
# for devfile in syspath.glob('**/dev'):
|
||||
# if devfile.is_file():
|
||||
# devpath = devfile.parent
|
||||
# # Get devnames
|
||||
# proc = subprocess.Popen(['udevadm', 'info', '-q', 'name', '-p', devpath],
|
||||
# stdout=subprocess.PIPE)
|
||||
# output = proc.stdout.read()
|
||||
# devname = output.decode('utf-8')
|
||||
# if not devname.startswith('bus') and not devname.startswith('input'):
|
||||
# # get properties
|
||||
# proc = subprocess.Popen(['udevadm', 'info', '-q', 'property', '--export', '-p', devpath],
|
||||
# stdout=subprocess.PIPE)
|
||||
# output = proc.stdout.read()
|
||||
# output = output.decode('utf-8')
|
||||
# # Not nice, but convert the output into dict
|
||||
# output = output.replace("='", "\':\'")
|
||||
# output = re.sub('^', "\'", output, flags=re.MULTILINE)
|
||||
# output = '{' + output[:-1].replace('\n', ', ') + '}'
|
||||
# properties = ast.literal_eval(output)
|
||||
# if 'ID_SERIAL' in properties:
|
||||
# p = str(path.joinpath('/dev', devname))
|
||||
# p = p.replace('\n', '')
|
||||
# result[properties['ID_SERIAL']] = p
|
||||
# return result
|
||||
|
||||
|
||||
def update_USB_devices(devices):
|
||||
def update_USB_devices(devices, fullname=True):
|
||||
"""
|
||||
Find paths for devices.
|
||||
|
||||
|
@ -62,8 +66,9 @@ def update_USB_devices(devices):
|
|||
detection, and bind the path.
|
||||
|
||||
devices: dictionnary
|
||||
fullname: if True, Manufacturer_SN, else Manufacturer.
|
||||
"""
|
||||
res = list_USB_devices()
|
||||
res = list_USB_devices(full=fullname)
|
||||
for device in devices:
|
||||
name = devices[device]['name']
|
||||
if name in res:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
__version__ = '0.1.2'
|
||||
__version__ = '0.1.3'
|
||||
|
||||
from .LTS import *
|
||||
from .USBdev import *
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue