From: "Mantas Mikulėnas" <grawity@gmail.com>
To: linux-usb@vger.kernel.org
Cc: gregkh@linuxfoundation.org, "Mantas Mikulėnas" <grawity@gmail.com>
Subject: [PATCH 23/34] lsusb.py: Usb* classes: call read() automatically from constructor
Date: Mon, 6 May 2019 12:02:30 +0300 [thread overview]
Message-ID: <20190506090241.169665-24-grawity@gmail.com> (raw)
In-Reply-To: <20190506090241.169665-1-grawity@gmail.com>
Signed-off-by: Mantas Mikulėnas <grawity@gmail.com>
---
lsusb.py.in | 41 +++++++++++++++++++++--------------------
1 file changed, 21 insertions(+), 20 deletions(-)
diff --git a/lsusb.py.in b/lsusb.py.in
index e9e18dc..09363d3 100644
--- a/lsusb.py.in
+++ b/lsusb.py.in
@@ -238,16 +238,18 @@ def find_dev(driver, usbname):
class UsbEndpoint:
"Container for USB endpoint info"
- def __init__(self, parent = None, indent = 18):
+ def __init__(self, parent, fname, indent=18):
self.parent = parent
self.indent = indent
- self.fname = ""
+ self.fname = fname
self.epaddr = 0
self.len = 0
self.ival = ""
self.type = ""
self.attr = 0
self.max = 0
+ if self.fname:
+ self.read(self.fname)
def read(self, fname):
fullpath = ""
@@ -271,11 +273,11 @@ class UsbEndpoint:
class UsbInterface:
"Container for USB interface info"
- def __init__(self, parent = None, level = 1):
+ def __init__(self, parent, fname, level=1):
self.parent = parent
self.level = level
self.fullpath = ""
- self.fname = ""
+ self.fname = fname
self.iclass = 0
self.isclass = 0
self.iproto = 0
@@ -284,6 +286,9 @@ class UsbInterface:
self.devname = ""
self.protoname = ""
self.eps = []
+ if self.fname:
+ self.read(self.fname)
+
def read(self, fname):
fullpath = ""
if self.parent:
@@ -302,10 +307,9 @@ class UsbInterface:
pass
self.protoname = find_usb_class(self.iclass, self.isclass, self.iproto)
if showeps:
- for epfnm in os.listdir(prefix + fullpath):
- if epfnm[:3] == "ep_":
- ep = UsbEndpoint(self, self.level+len(self.fname))
- ep.read(epfnm)
+ for dirent in os.listdir(prefix + fullpath):
+ if dirent[:3] == "ep_":
+ ep = UsbEndpoint(self, dirent, self.level + len(self.fname))
self.eps.append(ep)
def __str__(self):
@@ -326,10 +330,10 @@ class UsbInterface:
class UsbDevice:
"Container for USB device info"
- def __init__(self, parent = None, level = 0):
+ def __init__(self, parent, fname, level=0):
self.parent = parent
self.level = level
- self.fname = ""
+ self.fname = fname
self.fullpath = ""
self.iclass = 0
self.isclass = 0
@@ -346,6 +350,9 @@ class UsbDevice:
self.devname = ""
self.interfaces = []
self.children = []
+ if self.fname:
+ self.read(self.fname)
+ self.readchildren()
def read(self, fname):
self.fname = fname
@@ -402,13 +409,10 @@ class UsbDevice:
if not dirent[0:1].isdigit():
continue
if os.access(prefix + dirent + "/bInterfaceClass", os.R_OK):
- iface = UsbInterface(self, self.level+1)
- iface.read(dirent)
+ iface = UsbInterface(self, dirent, self.level+1)
self.interfaces.append(iface)
else:
- usbdev = UsbDevice(self, self.level+1)
- usbdev.read(dirent)
- usbdev.readchildren()
+ usbdev = UsbDevice(self, dirent, self.level+1)
self.children.append(usbdev)
usbsortkey = lambda obj: [int(x) for x in re.split(r"[-:.]", obj.fname)]
self.interfaces.sort(key=usbsortkey)
@@ -438,8 +442,7 @@ class UsbDevice:
else:
strg += "\n"
if showeps:
- ep = UsbEndpoint(self, self.level+len(self.fname))
- ep.read("ep_00")
+ ep = UsbEndpoint(self, "ep_00", self.level+len(self.fname))
strg += str(ep)
if showint:
for iface in self.interfaces:
@@ -472,9 +475,7 @@ def read_usb():
for dirent in os.listdir(prefix):
if not dirent[0:3] == "usb":
continue
- usbdev = UsbDevice(None, 0)
- usbdev.read(dirent)
- usbdev.readchildren()
+ usbdev = UsbDevice(None, dirent, 0)
root_hubs.append(usbdev)
root_hubs.sort(key=lambda x: int(x.fname[3:]))
for usbdev in root_hubs:
--
2.21.0
next prev parent reply other threads:[~2019-05-06 9:03 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-06 9:02 usbutils - various patches to the lsusb.py script Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 01/34] lsusb.py: sort devices and interfaces numerically Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 02/34] lsusb.py: sort toplevel entries Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 03/34] lsusb.py: improve usage text Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 04/34] lsusb.py: replace fake deepcopy() Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 05/34] lsusb.py: remove -w (warn if usb.ids not sorted) option Mantas Mikulėnas
2019-05-06 11:12 ` Greg KH
2019-05-06 11:21 ` Mantas Mikulėnas
2019-05-06 12:19 ` Greg KH
2019-05-06 9:02 ` [PATCH 06/34] lsusb.py: ensure all error messages are written to stderr Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 07/34] lsusb.py: support long options Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 08/34] lsusb.py: do not entirely hide usb.ids exceptions Mantas Mikulėnas
2019-05-06 12:29 ` Greg KH
2019-05-06 12:47 ` Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 09/34] lsusb.py: use regular print() instead of hand-rolling the same thing Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 10/34] lsusb.py: avoid shadowing Python's built-in 'str' Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 11/34] lsusb.py: replace usb.ids binary search with dict lookup Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 12/34] lsusb.py: remove now-unused bin_search() Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 13/34] lsusb.py: avoid manual calls to __foo__() Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 14/34] lsusb.py: replace __repr__() for USB IDs with __str__() Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 15/34] lsusb.py: insert class FF:FF:FF into usbclasses to avoid special casing Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 16/34] lsusb.py: entirely remove Usb* classes Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 17/34] lsusb.py: cosmetic - replace tuples-as-"immutable lists" with regular lists Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 18/34] lsusb.py: use 'elif' where suitable Mantas Mikulėnas
2019-05-06 12:22 ` Greg KH
2019-05-06 9:02 ` [PATCH 19/34] lsusb.py: remove dead code Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 20/34] lsusb.py: move unrelated code out of try..except Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 21/34] lsusb.py: allow - as well as _ when matching hci module names Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 22/34] lsusb.py: use a constant for the magic class number 9 Mantas Mikulėnas
2019-05-06 9:02 ` Mantas Mikulėnas [this message]
2019-05-06 9:02 ` [PATCH 24/34] lsusb.py: UsbEndpoint: indent is a class implementation detail Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 25/34] lsusb.py: a few cosmetic changes Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 26/34] lsusb.py: shorten find_usb_class() Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 27/34] lsusb.py: give all Usb* objects a .path attribute Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 28/34] lsusb.py: add an actual __repr__() to classes Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 29/34] lsusb.py: give all Usb* classes a superclass Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 30/34] lsusb.py: convert readattr() and readlink() to methods of the container Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 31/34] lsusb.py: use color by default Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 32/34] lsusb.py: rework output for more consistent indent of both columns Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 33/34] lsusb.py: fix endpoint interval spacing Mantas Mikulėnas
2019-05-06 9:02 ` [PATCH 34/34] lsusb.py: visually group USB-version-related fields Mantas Mikulėnas
2019-05-06 12:32 ` usbutils - various patches to the lsusb.py script Greg KH
2019-05-06 12:57 ` Mantas Mikulėnas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190506090241.169665-24-grawity@gmail.com \
--to=grawity@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).