def create_ble(device_name=None, serial_number=None,
                   scan_timeout=None, loop=None):
        """
        Create a JadeAPI object using the BLE interface described.
        NOTE: raises JadeError if BLE dependencies not installed.

        Parameters
        ----------
        device_name : str, optional
            The device name of the desired BLE device.
            Underlying implementation will default (to 'Jade')

        serial_number : int, optional
            The serial number of the desired BLE device
            - used to disambiguate multiple beacons with the same 'device name'
            Underlying implementation will connect to the first beacon it scans
            with the matching 'device name'.

        scan_timeout : int, optional
            The timeout when scanning for devices which match the device name/serial number.
            Underlying implementation will default (to 60s)

        loop : optional
            The asynchio event loop to use, if required.
            Underlying implementation will default (to asyncio.get_event_loop())

        Returns
        -------
        JadeAPI
            API object configured to use given BLE parameters.
            NOTE: the api instance has not yet tried to contact the hw
            - caller must call 'connect()' before trying to use the Jade.

        Raises
        ------
        JadeError if BLE backend not available (ie. BLE dependencies not installed)
        """
        impl = JadeInterface.create_ble(device_name, serial_number,
                                        scan_timeout, loop)
        return JadeAPI(impl)

        Create a JadeAPI object using the BLE interface described.
        NOTE: raises JadeError if BLE dependencies not installed.

        Parameters
        ----------
        device_name : str, optional
            The device name of the desired BLE device.
            Underlying implementation will default (to 'Jade')

        serial_number : int, optional
            The serial number of the desired BLE device
            - used to disambiguate multiple beacons with the same 'device name'
            Underlying implementation will connect to the first beacon it scans
            with the matching 'device name'.

        scan_timeout : int, optional
            The timeout when scanning for devices which match the device name/serial number.
            Underlying implementation will default (to 60s)

        loop : optional
            The asynchio event loop to use, if required.
            Underlying implementation will default (to asyncio.get_event_loop())

        Returns
        -------
        JadeAPI
            API object configured to use given BLE parameters.
            NOTE: the api instance has not yet tried to contact the hw
            - caller must call 'connect()' before trying to use the Jade.

        Raises
        ------
        JadeError if BLE backend not available (ie. BLE dependencies not installed)
        
electrum/plugins/jade/jadepy/jade.py