code: def find(self, vid=None, pid=None, serial=None, interface=None, \
              path=None, release_number=None, manufacturer=None,
              product=None, usage=None, usage_page=None):
          
          result = []
  
          for dev in self.device_list:
              if vid not in [0, None] and dev.vendor_id != vid:
                  continue
              if pid not in [0, None] and dev.product_id != pid:
                  continue
              if serial and dev.serial_number != serial:
                  continue
              if path and dev.path != path:
                  continue
              if manufacturer and dev.manufacturer_string != manufacturer:
                  continue
              if product and dev.product_string != product:
                  continue
              if release_number != None and dev.release_number != release_number:
                  continue
              if interface != None and dev.interface_number != interface:
                  continue
              if usage != None and dev.usage != usage:
                  continue
              if usage_page != None and dev.usage_page != usage_page:
                  continue
              result.append(dev)
          return result
docs: Attempts to open a device in this `Enumeration` object. Optional
          arguments can be provided to filter the resulting list based on various
          parameters of the HID devices.
  
          Args:
              vid: filters by USB Vendor ID
              pid: filters by USB Product ID
              serial: filters by USB serial string (.iSerialNumber)
              interface: filters by interface number (bInterfaceNumber)
              release_number: filters by the USB release number (.bcdDevice)
              manufacturer: filters by USB manufacturer string (.iManufacturer)
              product: filters by USB product string (.iProduct)
              usage: filters by HID usage
              usage_page: filters by HID usage_page
              path: filters by HID API path.