Scans for grizzlies that have not been bound, or constructed, and returns a list
        of their id's, or motor number.

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)