use std::time::Duration;
use map_core::client::MapClient;
use pbap_core::client::PbapClient;
use tokio::io::{AsyncRead, AsyncWrite};
use transport::rfcomm::DEFAULT_BT_CONNECTED_GATE;
use crate::SessionError;
pub async fn establish_map_session<T: AsyncRead + AsyncWrite + Unpin>(
stream: T,
) -> Result<MapClient<T>, SessionError> {
let mut client = MapClient::connect(stream).await?;
client.set_notification_registration(true).await?;
Ok(client)
}
pub async fn connect_map(
addr: bluer::Address,
channel: u8,
bt_gate: Duration,
) -> Result<MapClient<bluer::rfcomm::Stream>, SessionError> {
let stream = transport::rfcomm::connect(addr, channel, bt_gate).await?;
establish_map_session(stream).await
}
pub async fn connect_pbap(
addr: bluer::Address,
channel: u8,
) -> Result<PbapClient<bluer::rfcomm::Stream>, SessionError> {
let stream = transport::rfcomm::connect(addr, channel, DEFAULT_BT_CONNECTED_GATE).await?;
let client = PbapClient::connect(stream).await?;
Ok(client)
}