Lines Matching refs:session

69 static void avdtp_lock(struct bt_avdtp *session)  in avdtp_lock()  argument
71 k_sem_take(&session->sem_lock, K_FOREVER); in avdtp_lock()
74 static void avdtp_unlock(struct bt_avdtp *session) in avdtp_unlock() argument
76 k_sem_give(&session->sem_lock); in avdtp_unlock()
111 static inline void bt_avdtp_clear_req(struct bt_avdtp *session) in bt_avdtp_clear_req() argument
113 avdtp_lock(session); in bt_avdtp_clear_req()
114 session->req = NULL; in bt_avdtp_clear_req()
115 avdtp_unlock(session); in bt_avdtp_clear_req()
121 struct bt_avdtp *session; in bt_avdtp_media_l2cap_connected() local
129 session = sep->session; in bt_avdtp_media_l2cap_connected()
130 if (session == NULL) { in bt_avdtp_media_l2cap_connected()
134 LOG_DBG("chan %p session %p", chan, session); in bt_avdtp_media_l2cap_connected()
137 if (session->req != NULL) { in bt_avdtp_media_l2cap_connected()
138 struct bt_avdtp_req *req = session->req; in bt_avdtp_media_l2cap_connected()
141 bt_avdtp_clear_req(session); in bt_avdtp_media_l2cap_connected()
151 struct bt_avdtp *session; in bt_avdtp_media_l2cap_disconnected() local
154 session = sep->session; in bt_avdtp_media_l2cap_disconnected()
155 if (session == NULL) { in bt_avdtp_media_l2cap_disconnected()
163 if ((sep->state == AVDTP_CLOSING) && (session->req != NULL) && in bt_avdtp_media_l2cap_disconnected()
164 (session->req->sig == BT_AVDTP_CLOSE)) { in bt_avdtp_media_l2cap_disconnected()
166 struct bt_avdtp_req *req = session->req; in bt_avdtp_media_l2cap_disconnected()
171 bt_avdtp_clear_req(session); in bt_avdtp_media_l2cap_disconnected()
180 session->ops->stream_l2cap_disconnected(session, sep); in bt_avdtp_media_l2cap_disconnected()
203 static int avdtp_media_connect(struct bt_avdtp *session, struct bt_avdtp_sep *sep) in avdtp_media_connect() argument
205 if (!session) { in avdtp_media_connect()
209 sep->session = session; in avdtp_media_connect()
214 return bt_l2cap_chan_connect(session->br_chan.chan.conn, &sep->chan.chan, in avdtp_media_connect()
268 static void avdtp_discover_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_discover_cmd() argument
275 if (session->ops->discovery_ind == NULL) { in avdtp_discover_cmd()
278 err = session->ops->discovery_ind(session, &error_code); in avdtp_discover_cmd()
307 err = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in avdtp_discover_cmd()
315 static void avdtp_discover_rsp(struct bt_avdtp *session, struct net_buf *buf, uint8_t msg_type) in avdtp_discover_rsp() argument
317 struct bt_avdtp_req *req = session->req; in avdtp_discover_rsp()
323 k_work_cancel_delayable(&session->timeout_work); in avdtp_discover_rsp()
325 bt_avdtp_clear_req(session); in avdtp_discover_rsp()
359 static void avdtp_get_capabilities_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_get_capabilities_cmd() argument
368 if ((sep == NULL) || (session->ops->get_capabilities_ind == NULL)) { in avdtp_get_capabilities_cmd()
377 err = session->ops->get_capabilities_ind(session, sep, rsp_buf, &error_code); in avdtp_get_capabilities_cmd()
398 err = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in avdtp_get_capabilities_cmd()
406 static void avdtp_get_capabilities_rsp(struct bt_avdtp *session, struct net_buf *buf, in avdtp_get_capabilities_rsp() argument
409 struct bt_avdtp_req *req = session->req; in avdtp_get_capabilities_rsp()
415 k_work_cancel_delayable(&session->timeout_work); in avdtp_get_capabilities_rsp()
417 bt_avdtp_clear_req(session); in avdtp_get_capabilities_rsp()
424 static void avdtp_process_configuration_cmd(struct bt_avdtp *session, struct net_buf *buf, in avdtp_process_configuration_cmd() argument
438 } else if (!reconfig && session->ops->set_configuration_ind == NULL) { in avdtp_process_configuration_cmd()
440 } else if (reconfig && session->ops->re_configuration_ind == NULL) { in avdtp_process_configuration_cmd()
461 err = session->ops->set_configuration_ind(session, sep, int_seid, in avdtp_process_configuration_cmd()
464 err = session->ops->re_configuration_ind(session, sep, int_seid, in avdtp_process_configuration_cmd()
496 ret = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in avdtp_process_configuration_cmd()
509 static void avdtp_process_configuration_rsp(struct bt_avdtp *session, struct net_buf *buf, in avdtp_process_configuration_rsp() argument
512 struct bt_avdtp_req *req = session->req; in avdtp_process_configuration_rsp()
518 k_work_cancel_delayable(&session->timeout_work); in avdtp_process_configuration_rsp()
538 bt_avdtp_clear_req(session); in avdtp_process_configuration_rsp()
545 static void avdtp_set_configuration_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_set_configuration_cmd() argument
547 avdtp_process_configuration_cmd(session, buf, tid, false); in avdtp_set_configuration_cmd()
550 static void avdtp_set_configuration_rsp(struct bt_avdtp *session, struct net_buf *buf, in avdtp_set_configuration_rsp() argument
553 avdtp_process_configuration_rsp(session, buf, msg_type, false); in avdtp_set_configuration_rsp()
556 static void avdtp_re_configure_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_re_configure_cmd() argument
558 avdtp_process_configuration_cmd(session, buf, tid, true); in avdtp_re_configure_cmd()
561 static void avdtp_re_configure_rsp(struct bt_avdtp *session, struct net_buf *buf, uint8_t msg_type) in avdtp_re_configure_rsp() argument
563 avdtp_process_configuration_rsp(session, buf, msg_type, true); in avdtp_re_configure_rsp()
566 static void avdtp_open_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_open_cmd() argument
577 if ((sep == NULL) || (session->ops->open_ind == NULL)) { in avdtp_open_cmd()
584 err = session->ops->open_ind(session, sep, &error_code); in avdtp_open_cmd()
603 session->current_sep = sep; in avdtp_open_cmd()
606 ret = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in avdtp_open_cmd()
619 static void avdtp_open_rsp(struct bt_avdtp *session, struct net_buf *buf, uint8_t msg_type) in avdtp_open_rsp() argument
621 struct bt_avdtp_req *req = session->req; in avdtp_open_rsp()
627 k_work_cancel_delayable(&session->timeout_work); in avdtp_open_rsp()
634 if (!avdtp_media_connect(session, CTRL_REQ(req)->sep)) { in avdtp_open_rsp()
640 bt_avdtp_clear_req(session); in avdtp_open_rsp()
663 static void avdtp_start_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_start_cmd() argument
674 if ((sep == NULL) || (session->ops->start_ind == NULL)) { in avdtp_start_cmd()
681 err = session->ops->start_ind(session, sep, &error_code); in avdtp_start_cmd()
701 ret = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in avdtp_start_cmd()
714 static void avdtp_start_rsp(struct bt_avdtp *session, struct net_buf *buf, uint8_t msg_type) in avdtp_start_rsp() argument
716 struct bt_avdtp_req *req = session->req; in avdtp_start_rsp()
722 k_work_cancel_delayable(&session->timeout_work); in avdtp_start_rsp()
734 bt_avdtp_clear_req(session); in avdtp_start_rsp()
741 static void avdtp_close_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_close_cmd() argument
752 if ((sep == NULL) || (session->ops->close_ind == NULL)) { in avdtp_close_cmd()
759 err = session->ops->close_ind(session, sep, &error_code); in avdtp_close_cmd()
781 ret = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in avdtp_close_cmd()
794 static void avdtp_close_rsp(struct bt_avdtp *session, struct net_buf *buf, uint8_t msg_type) in avdtp_close_rsp() argument
796 struct bt_avdtp_req *req = session->req; in avdtp_close_rsp()
802 k_work_cancel_delayable(&session->timeout_work); in avdtp_close_rsp()
813 bt_avdtp_clear_req(session); in avdtp_close_rsp()
820 static void avdtp_suspend_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_suspend_cmd() argument
831 if ((sep == NULL) || (session->ops->suspend_ind == NULL)) { in avdtp_suspend_cmd()
838 err = session->ops->suspend_ind(session, sep, &error_code); in avdtp_suspend_cmd()
858 ret = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in avdtp_suspend_cmd()
871 static void avdtp_suspend_rsp(struct bt_avdtp *session, struct net_buf *buf, uint8_t msg_type) in avdtp_suspend_rsp() argument
873 struct bt_avdtp_req *req = session->req; in avdtp_suspend_rsp()
879 k_work_cancel_delayable(&session->timeout_work); in avdtp_suspend_rsp()
891 bt_avdtp_clear_req(session); in avdtp_suspend_rsp()
898 static void avdtp_abort_cmd(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) in avdtp_abort_cmd() argument
909 if ((sep == NULL) || (session->ops->abort_ind == NULL)) { in avdtp_abort_cmd()
913 err = session->ops->abort_ind(session, sep, &error_code); in avdtp_abort_cmd()
932 ret = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in avdtp_abort_cmd()
950 static void avdtp_abort_rsp(struct bt_avdtp *session, struct net_buf *buf, uint8_t msg_type) in avdtp_abort_rsp() argument
952 struct bt_avdtp_req *req = session->req; in avdtp_abort_rsp()
958 k_work_cancel_delayable(&session->timeout_work); in avdtp_abort_rsp()
982 bt_avdtp_clear_req(session); in avdtp_abort_rsp()
1019 static int avdtp_send(struct bt_avdtp *session, struct net_buf *buf, struct bt_avdtp_req *req) in avdtp_send() argument
1024 avdtp_lock(session); in avdtp_send()
1026 if (session->req != NULL) { in avdtp_send()
1027 avdtp_unlock(session); in avdtp_send()
1031 session->req = req; in avdtp_send()
1032 avdtp_unlock(session); in avdtp_send()
1035 result = bt_l2cap_chan_send(&session->br_chan.chan, buf); in avdtp_send()
1038 bt_avdtp_clear_req(session); in avdtp_send()
1048 k_work_init_delayable(&session->timeout_work, avdtp_timeout); in avdtp_send()
1050 k_work_reschedule(&session->timeout_work, AVDTP_TIMEOUT); in avdtp_send()
1077 struct bt_avdtp *session; in bt_avdtp_l2cap_connected() local
1084 session = AVDTP_CHAN(chan); in bt_avdtp_l2cap_connected()
1085 LOG_DBG("chan %p session %p", chan, session); in bt_avdtp_l2cap_connected()
1088 session->ops->connected(session); in bt_avdtp_l2cap_connected()
1093 struct bt_avdtp *session = AVDTP_CHAN(chan); in bt_avdtp_l2cap_disconnected() local
1095 LOG_DBG("chan %p session %p", chan, session); in bt_avdtp_l2cap_disconnected()
1096 session->br_chan.chan.conn = NULL; in bt_avdtp_l2cap_disconnected()
1098 if (session->req) { in bt_avdtp_l2cap_disconnected()
1099 struct bt_avdtp_req *req = session->req; in bt_avdtp_l2cap_disconnected()
1102 bt_avdtp_clear_req(session); in bt_avdtp_l2cap_disconnected()
1110 session->ops->disconnected(session); in bt_avdtp_l2cap_disconnected()
1113 void (*cmd_handler[])(struct bt_avdtp *session, struct net_buf *buf, uint8_t tid) = {
1129 void (*rsp_handler[])(struct bt_avdtp *session, struct net_buf *buf, uint8_t msg_type) = {
1148 struct bt_avdtp *session = AVDTP_CHAN(chan); in bt_avdtp_l2cap_recv() local
1185 cmd_handler[sigid - 1U](session, buf, tid); in bt_avdtp_l2cap_recv()
1191 if (session->req == NULL) { in bt_avdtp_l2cap_recv()
1196 if (session->req->sig != sigid || session->req->tid != tid) { in bt_avdtp_l2cap_recv()
1199 session->req->sig, session->req->tid); in bt_avdtp_l2cap_recv()
1205 rsp_handler[sigid - 1U](session, buf, msgtype); in bt_avdtp_l2cap_recv()
1221 err = bt_l2cap_chan_send(&session->br_chan.chan, rsp_buf); in bt_avdtp_l2cap_recv()
1237 int bt_avdtp_connect(struct bt_conn *conn, struct bt_avdtp *session) in bt_avdtp_connect() argument
1239 if (!session) { in bt_avdtp_connect()
1250 if (session->br_chan.chan.conn != NULL) { in bt_avdtp_connect()
1255 session->br_chan.chan.conn = conn; in bt_avdtp_connect()
1258 k_sem_init(&session->sem_lock, 1, 1); in bt_avdtp_connect()
1259 session->br_chan.rx.mtu = BT_L2CAP_RX_MTU; in bt_avdtp_connect()
1260 session->br_chan.chan.ops = &signal_chan_ops; in bt_avdtp_connect()
1261 session->br_chan.required_sec_level = BT_SECURITY_L2; in bt_avdtp_connect()
1263 return bt_l2cap_chan_connect(conn, &session->br_chan.chan, BT_L2CAP_PSM_AVDTP); in bt_avdtp_connect()
1266 int bt_avdtp_disconnect(struct bt_avdtp *session) in bt_avdtp_disconnect() argument
1268 if (!session) { in bt_avdtp_disconnect()
1272 LOG_DBG("session %p", session); in bt_avdtp_disconnect()
1274 return bt_l2cap_chan_disconnect(&session->br_chan.chan); in bt_avdtp_disconnect()
1280 struct bt_avdtp *session = NULL; in bt_avdtp_l2cap_accept() local
1285 result = event_cb->accept(conn, &session); in bt_avdtp_l2cap_accept()
1297 if (session->br_chan.chan.conn == NULL) { in bt_avdtp_l2cap_accept()
1298 session->br_chan.chan.conn = conn; in bt_avdtp_l2cap_accept()
1301 k_sem_init(&session->sem_lock, 1, 1); in bt_avdtp_l2cap_accept()
1302 session->br_chan.chan.ops = &signal_chan_ops; in bt_avdtp_l2cap_accept()
1303 session->br_chan.rx.mtu = BT_L2CAP_RX_MTU; in bt_avdtp_l2cap_accept()
1304 *chan = &session->br_chan.chan; in bt_avdtp_l2cap_accept()
1309 if (session->current_sep != NULL) { in bt_avdtp_l2cap_accept()
1310 session->current_sep->session = session; in bt_avdtp_l2cap_accept()
1311 session->current_sep->chan.chan.ops = &stream_chan_ops; in bt_avdtp_l2cap_accept()
1312 session->current_sep->chan.rx.mtu = BT_L2CAP_RX_MTU; in bt_avdtp_l2cap_accept()
1313 session->current_sep->chan.required_sec_level = BT_SECURITY_L2; in bt_avdtp_l2cap_accept()
1314 *chan = &session->current_sep->chan.chan; in bt_avdtp_l2cap_accept()
1315 session->current_sep = NULL; in bt_avdtp_l2cap_accept()
1390 int bt_avdtp_discover(struct bt_avdtp *session, struct bt_avdtp_discover_params *param) in bt_avdtp_discover() argument
1396 if (!param || !session) { in bt_avdtp_discover()
1407 err = avdtp_send(session, buf, &param->req); in bt_avdtp_discover()
1434 int bt_avdtp_get_capabilities(struct bt_avdtp *session, in bt_avdtp_get_capabilities() argument
1441 if (!param || !session) { in bt_avdtp_get_capabilities()
1456 err = avdtp_send(session, buf, &param->req); in bt_avdtp_get_capabilities()
1529 static int avdtp_process_configure_command(struct bt_avdtp *session, uint8_t cmd, in avdtp_process_configure_command() argument
1536 if (!param || !session) { in avdtp_process_configure_command()
1567 err = avdtp_send(session, buf, &param->req); in avdtp_process_configure_command()
1575 int bt_avdtp_set_configuration(struct bt_avdtp *session, in bt_avdtp_set_configuration() argument
1578 if (!param || !session || !param->sep) { in bt_avdtp_set_configuration()
1587 return avdtp_process_configure_command(session, BT_AVDTP_SET_CONFIGURATION, param); in bt_avdtp_set_configuration()
1590 int bt_avdtp_reconfigure(struct bt_avdtp *session, struct bt_avdtp_set_configuration_params *param) in bt_avdtp_reconfigure() argument
1592 if (!param || !session || !param->sep) { in bt_avdtp_reconfigure()
1601 return avdtp_process_configure_command(session, BT_AVDTP_RECONFIGURE, param); in bt_avdtp_reconfigure()
1604 static int bt_avdtp_ctrl(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param, uint8_t ctrl, in bt_avdtp_ctrl() argument
1611 if (!param || !session || !param->sep) { in bt_avdtp_ctrl()
1630 err = avdtp_send(session, buf, &param->req); in bt_avdtp_ctrl()
1638 int bt_avdtp_open(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param) in bt_avdtp_open() argument
1640 return bt_avdtp_ctrl(session, param, BT_AVDTP_OPEN, AVDTP_CONFIGURED); in bt_avdtp_open()
1643 int bt_avdtp_close(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param) in bt_avdtp_close() argument
1645 return bt_avdtp_ctrl(session, param, BT_AVDTP_CLOSE, AVDTP_OPEN | AVDTP_STREAMING); in bt_avdtp_close()
1648 int bt_avdtp_start(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param) in bt_avdtp_start() argument
1652 err = bt_avdtp_ctrl(session, param, BT_AVDTP_START, AVDTP_OPEN); in bt_avdtp_start()
1660 int bt_avdtp_suspend(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param) in bt_avdtp_suspend() argument
1662 return bt_avdtp_ctrl(session, param, BT_AVDTP_SUSPEND, AVDTP_STREAMING); in bt_avdtp_suspend()
1665 int bt_avdtp_abort(struct bt_avdtp *session, struct bt_avdtp_ctrl_params *param) in bt_avdtp_abort() argument
1667 return bt_avdtp_ctrl(session, param, BT_AVDTP_ABORT, in bt_avdtp_abort()