code: def list_available_devices():
      
  
      class find_class(object):
          def __init__(self, class_):
              self._class = class_
          def __call__(self, device):
              # first, let's check the device
              if device.bDeviceClass == self._class:
                  return True
              # ok, transverse all devices to find an interface that matches our class
              for cfg in device:
                  # find_descriptor: what's it?
                  intf = usb.util.find_descriptor(cfg, bInterfaceClass=self._class)
                  if intf is not None:
                      return True
              return False
  
      # only Brother printers
      printers = usb.core.find(find_all=1, custom_match=find_class(7), idVendor=0x04f9)
  
      def identifier(dev):
          try:
              serial = usb.util.get_string(dev, 256, dev.iSerialNumber)
              return 'usb://0x{:04x}:0x{:04x}_{}'.format(dev.idVendor, dev.idProduct, serial)
          except:
              return 'usb://0x{:04x}:0x{:04x}'.format(dev.idVendor, dev.idProduct)
  
      return [{'identifier': identifier(printer), 'instance': printer} for printer in printers]
docs: List all available devices for the respective backend
  
      returns: devices: a list of dictionaries with the keys 'identifier' and 'instance': \
          [ {'identifier': 'usb://0x04f9:0x2015/C5Z315686', 'instance': pyusb.core.Device()}, ]
          The 'identifier' is of the format idVendor:idProduct_iSerialNumber.