docs: def get_all_ids(idVendor = GrizzlyUSB.ID_VENDOR, idProduct=GrizzlyUSB.ID_PRODUCT):
          """ Scans for grizzlies that have not been bound, or constructed, and returns a list
          of their id's, or motor number."""
          all_dev = GrizzlyUSB.get_all_usb_devices(idVendor, idProduct)
              
          if len(all_dev) <= 0:
              raise usb.USBError("Could not find any GrizzlyBear device (idVendor=%d, idProduct=%d)" % (idVendor, idProduct))
          else:
              all_addresses = []
  
              # bound devices is a list of devices that are already busy.
              bound_devices = []
              for device in all_dev:
                  internal_addr = GrizzlyUSB.get_device_address(device)
  
                  if internal_addr == GrizzlyUSB.USB_DEVICE_ERROR: # device bound
                      bound_devices.append(device)
                  else:
                      all_addresses.append(internal_addr)
  
              # we release all devices that we aren't using and aren't bound.
              for device in all_dev:
                  if device not in bound_devices:
                      usb.util.dispose_resources(device)
              return map(addr_to_id, all_addresses)