list_port: add .vid, .pid and .serial on linux
diff --git a/serial/tools/list_ports_linux.py b/serial/tools/list_ports_linux.py
index 68e24d7..37dd997 100644
--- a/serial/tools/list_ports_linux.py
+++ b/serial/tools/list_ports_linux.py
@@ -29,9 +29,19 @@
             self.subsystem = os.path.basename(os.path.realpath(os.path.join(self.device_path, 'subsystem')))

         if self.subsystem in 'usb-serial':

             self.usb_device_path = os.path.dirname(os.path.dirname(self.device_path))

-        if self.subsystem in 'usb':

+        elif self.subsystem in 'usb':

             self.usb_device_path = os.path.dirname(self.device_path)

+        else:

+            self.usb_device_path = None

         #~ print repr(self.__dict__)

+        if self.usb_device_path is not None:

+            self.vid = self.read_line(self.usb_device_path, 'idVendor').upper()

+            self.pid = self.read_line(self.usb_device_path, 'idProduct').upper()

+            self.serial = self.read_line(self.usb_device_path, 'serial')

+        else:

+            self.vid = None

+            self.pid = None

+            self.serial = None

 

     def read_line(self, *args):

         """\

@@ -63,11 +73,10 @@
     def hwinfo(self):

         """Get a hardware description string"""

         if self.subsystem in ('usb', 'usb-serial'):

-            snr = self.read_line(self.usb_device_path, 'serial')

             return 'USB VID:PID={}:{}{}'.format(

-                    self.read_line(self.usb_device_path, 'idVendor'),

-                    self.read_line(self.usb_device_path, 'idProduct'),

-                    ' SER={}'.format(snr) if snr is not None else '',

+                    self.vid,

+                    self.pid,

+                    ' SER={}'.format(self.serial) if self.serial is not None else '',

                     )

         elif self.subsystem == 'pnp':  # PCI based devices

             return self.read_line(self.device_path, 'id')