Пример #1
0
    def answer(self):
        """Request to answer an incoming call. This function raises an
        InvalidOperationError if not started or handshake is pending. Otherwise
        returns no value. State changes resulting from this function are
        available via the on_event() event.
        """
        if not self._started:
            raise InvalidOperationError("Not started.")
        if not self._handshake_completed:
            raise InvalidOperationError("Handshake not completed.")

        self._connection.send_message(message="ATA")
Пример #2
0
    def dial(self, number):
        """Initiates a call to the specified number. This function raises an
        InvalidOperationError if not started or handshake is pending. Otherwise
        returns no value. State changes resulting from this function are
        available via the on_event() event.
        """
        if not self._started:
            raise InvalidOperationError("Not started.")
        if not self._handshake_completed:
            raise InvalidOperationError("Handshake not completed.")

        self._connection.send_message(
            message="ATD{}".format(number))
Пример #3
0
    def send_dtmf(self, dtmf):
        """Request to send DTMF to the network. This function raises an
        InvalidOperationError if not started or handshake is pending. Otherwise
        returns no value. State changes resulting from this function are
        available via the on_event() event.
        """
        if not self._started:
            raise InvalidOperationError("Not started.")
        if not self._handshake_completed:
            raise InvalidOperationError("Handshake not completed.")

        self._connection.send_message(
            message="AT+VTS={}".format(dtmf))
Пример #4
0
    def set_pairable(self, enabled, timeout=None):
        """Makes the BT subsystem pairable with other BT devices. Timeout is
        in seconds, or pass None for no timeout.
        """

        if not self._started:
            raise InvalidOperationError("Not started.")
        if not self._connected:
            raise InvalidOperationError("No suitable adapter available.")

        try:
            self._adapter_proxy.set("Pairable", enabled)
            self._adapter_proxy.set("PairableTimeout", UInt32(timeout or 0))
        except Exception as e:
            raise CommandError(e)
Пример #5
0
    def _in_data_ready(self, data):
        """Writes encoded data to the Sox input stream.
        """
        if not self._started:
            raise InvalidOperationError("Not started.")

        self._process.stdin.write(data)
Пример #6
0
    def set_discoverable(self, enabled, timeout=None):
        """Toggles visibility of the BT subsystem to other searching BT devices.
        Timeout is in seconds, or pass None for no timeout.
        """

        if not self._started:
            raise InvalidOperationError("Not started.")
        if not self._connected:
            raise InvalidOperationError("No suitable adapter available.")

        try:
            self._adapter_proxy.set("Discoverable", enabled)
            self._adapter_proxy.set("DiscoverableTimeout", UInt32(timeout
                                                                  or 0))
        except Exception as e:
            raise CommandError(e)
Пример #7
0
    def disconnect(self, destination):
        """Closes the connection to a remote PBAP server. If a connection does
        not exist, this does nothing. If not started, this raises an
        `InvalidOperationError` error. If an error occurred when disconnecting,
        this raises a `ConnectionError` error.
        """
        if not self._started:
            raise InvalidOperationError("Not started.")
        if destination not in self._clients:
            return

        try:
            self._clients[destination].abort()
            self._factory.destroy_session(
                session=self._clients[destination].session)
            logger.debug("Obex session to '{}' has been disconnected.".format(
                destination))
        except Exception:
            logger.exception(
                "Error disconnecting Obex session to '{}'.".format(
                    destination))
            raise ConnectionError(
                "Error disconnecting from '{}'.".format(destination))
        finally:
            self._clients.pop(destination)
Пример #8
0
    def connect(self, destination):
        """Establishes a connection to a remote PBAP server. If a connection
        to the specified server is already being tracked, this returns the
        client for that connection. If not started, this raises an
        `InvalidOperationError` error. If connection failed, this raises a
        `ConnectionError` error.
        """
        if not self._started:
            raise InvalidOperationError("Not started.")
        if destination in self._clients:
            return self._clients[destination]

        session = self._factory.create_session(destination=destination,
                                               target="pbap")
        try:
            self._clients[destination] = PhonebookClient(
                session_bus=self._session_bus, session=session)
            logger.debug("Obex session to '{}' has been established.".format(
                destination))
            return self._clients[destination]
        except Exception:
            logger.exception(
                "Error creating Obex session to '{}'.".format(destination))
            try:
                self._factory.destroy_session(session=session)
            except Exception:
                logger.exception("Error disconnecting Obex session to '{}'."
                                 "".format(destination))
            raise ConnectionError(
                "Error connecting to '{}'.".format(destination))
Пример #9
0
    def write(self, data):
        """Queues data to send to the socket. Raises InvalidOperationError
        if the pump is not started.
        """
        if not self._started:
            raise InvalidOperationError("Socket pump is not started.")

        self._send_buffer.append(data)
Пример #10
0
    def connect(self, destination):
        """Connects to a paired device. If not started, this raises an
        `InvalidOperationError` error. If connection failed, this raises a
        `ConnectionError` error.
        """
        if not self._started:
            raise InvalidOperationError("Not started.")

        client = self._clientmgr.connect(destination=destination)
        client.on_transfer_complete = self._client_transfer_complete
        client.on_transfer_error = self._client_transfer_error
        return client
Пример #11
0
    def disconnect(self, destination):
        """Disconnects from a paired device. If not started, this raises an
        `InvalidOperationError` error. If an error occurred when disconnecting,
        this raises a `ConnectionError` error.
        """
        if not self._started:
            raise InvalidOperationError("Not started.")

        client = self._clientmgr.get_client(destination=destination)
        if client is not None:
            client.on_transfer_complete = None
            client.on_transfer_error = None
        self._clientmgr.disconnect(destination=destination)