Loading system/btif/include/btif_sock_rfc.h +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading system/btif/src/btif_sock.cc +18 −3 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; Loading Loading @@ -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) { Loading system/btif/src/btif_sock_rfc.cc +14 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading system/gd/rust/linux/client/src/command_handler.rs +29 −0 Original line number Diff line number Diff line Loading @@ -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>", ), Loading Loading @@ -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>() Loading system/gd/rust/linux/client/src/dbus_iface.rs +4 −0 Original line number Diff line number Diff line Loading @@ -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
system/btif/include/btif_sock_rfc.h +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
system/btif/src/btif_sock.cc +18 −3 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; Loading Loading @@ -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) { Loading
system/btif/src/btif_sock_rfc.cc +14 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
system/gd/rust/linux/client/src/command_handler.rs +29 −0 Original line number Diff line number Diff line Loading @@ -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>", ), Loading Loading @@ -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>() Loading
system/gd/rust/linux/client/src/dbus_iface.rs +4 −0 Original line number Diff line number Diff line Loading @@ -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!() } }