Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b78886ed authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes from topic "send-msc"

* changes:
  floss: btclient: Add listen-rfcomm and send-msc commands
  btif_sock: Add control_req interface
parents 06656412 0c762adc
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -32,6 +32,10 @@
#include "types/raw_address.h"
bt_status_t btsock_rfc_init(int handle, uid_set_t* set);
bt_status_t btsock_rfc_cleanup();
bt_status_t btsock_rfc_control_req(uint8_t dlci, const RawAddress& bd_addr,
                                   uint8_t modem_signal, uint8_t break_signal,
                                   uint8_t discard_buffers,
                                   uint8_t break_signal_seq, bool fc);
bt_status_t btsock_rfc_listen(const char* name, const bluetooth::Uuid* uuid,
                              int channel, int* sock_fd, int flags,
                              int app_uid);
+18 −3
Original line number Diff line number Diff line
@@ -57,6 +57,11 @@ static bt_status_t btsock_connect(const RawAddress* bd_addr, btsock_type_t type,
                                  int flags, int app_uid);

static void btsock_request_max_tx_data_length(const RawAddress& bd_addr);
static bt_status_t btsock_control_req(uint8_t dlci, const RawAddress& bd_addr,
                                      uint8_t modem_signal,
                                      uint8_t break_signal,
                                      uint8_t discard_buffers,
                                      uint8_t break_signal_seq, bool fc);

static void btsock_signaled(int fd, int type, int flags, uint32_t user_id);

@@ -83,7 +88,8 @@ const btsock_interface_t* btif_sock_get_interface(void) {
  static btsock_interface_t interface = {
      sizeof(interface), btsock_listen,  /* listen */
      btsock_connect,                    /* connect */
      btsock_request_max_tx_data_length /* request_max_tx_data_length */
      btsock_request_max_tx_data_length, /* request_max_tx_data_length */
      btsock_control_req                 /* send_control_req */
  };

  return &interface;
@@ -232,6 +238,15 @@ void SockConnectionEvent::dump(const int fd) {
          ADDRESS_TO_LOGGABLE_CSTR(addr), str_state, str_role);
}

static bt_status_t btsock_control_req(uint8_t dlci, const RawAddress& bd_addr,
                                      uint8_t modem_signal,
                                      uint8_t break_signal,
                                      uint8_t discard_buffers,
                                      uint8_t break_signal_seq, bool fc) {
  return btsock_rfc_control_req(dlci, bd_addr, modem_signal, break_signal,
                                discard_buffers, break_signal_seq, fc);
}

static bt_status_t btsock_listen(btsock_type_t type, const char* service_name,
                                 const Uuid* service_uuid, int channel,
                                 int* sock_fd, int flags, int app_uid) {
+14 −0
Original line number Diff line number Diff line
@@ -265,6 +265,20 @@ static rfc_slot_t* create_srv_accept_rfc_slot(rfc_slot_t* srv_rs,
  return accept_rs;
}

bt_status_t btsock_rfc_control_req(uint8_t dlci, const RawAddress& bd_addr,
                                   uint8_t modem_signal, uint8_t break_signal,
                                   uint8_t discard_buffers,
                                   uint8_t break_signal_seq, bool fc) {
  int status =
      RFCOMM_ControlReqFromBTSOCK(dlci, bd_addr, modem_signal, break_signal,
                                  discard_buffers, break_signal_seq, fc);
  if (status != PORT_SUCCESS) {
    LOG_WARN("failed to send control parameters, status=%d", status);
    return BT_STATUS_FAIL;
  }
  return BT_STATUS_SUCCESS;
}

bt_status_t btsock_rfc_listen(const char* service_name,
                              const Uuid* service_uuid, int channel,
                              int* sock_fd, int flags, int app_uid) {
+29 −0
Original line number Diff line number Diff line
@@ -246,6 +246,8 @@ fn build_commands() -> HashMap<String, CommandOption> {
        CommandOption {
            rules: vec![
                String::from("socket listen <auth-required> <Bredr|LE>"),
                String::from("socket listen-rfcomm <scn>"),
                String::from("socket send-msc <dlci> <address>"),
                String::from(
                    "socket connect <address> <l2cap|rfcomm> <psm|uuid> <auth-required> <Bredr|LE>",
                ),
@@ -1461,6 +1463,33 @@ impl CommandHandler {

                self.context.lock().unwrap().socket_test_schedule = Some(schedule);
            }
            "send-msc" => {
                let dlci =
                    String::from(get_arg(args, 1)?).parse::<u8>().or(Err("Failed parsing DLCI"))?;
                let addr = String::from(get_arg(args, 2)?);
                self.context.lock().unwrap().qa_dbus.as_mut().unwrap().rfcomm_send_msc(dlci, addr);
            }
            "listen-rfcomm" => {
                let scn = String::from(get_arg(args, 1)?)
                    .parse::<i32>()
                    .or(Err("Failed parsing Service Channel Number"))?;
                let SocketResult { status, id } = self
                    .context
                    .lock()
                    .unwrap()
                    .socket_manager_dbus
                    .as_mut()
                    .unwrap()
                    .listen_using_rfcomm(callback_id, Some(scn), None, None, None);
                if status != BtStatus::Success {
                    return Err(format!(
                        "Failed to request for listening using rfcomm, status = {:?}",
                        status,
                    )
                    .into());
                }
                print_info!("Requested for listening using rfcomm on socket {}", id);
            }
            "listen" => {
                let auth_required = String::from(get_arg(args, 1)?)
                    .parse::<bool>()
+4 −0
Original line number Diff line number Diff line
@@ -2269,4 +2269,8 @@ impl IBluetoothQA for BluetoothQADBus {
    fn add_media_player(&self, name: String, browsing_supported: bool) {
        dbus_generated!()
    }
    #[dbus_method("RfcommSendMsc")]
    fn rfcomm_send_msc(&self, dlci: u8, addr: String) {
        dbus_generated!()
    }
}
Loading