Lines Matching refs:p_mcb
45 static void rfc_mx_sm_state_idle(tRFC_MCB* p_mcb, uint16_t event, void* p_data);
46 static void rfc_mx_sm_state_wait_conn_cnf(tRFC_MCB* p_mcb, uint16_t event,
48 static void rfc_mx_sm_state_configure(tRFC_MCB* p_mcb, uint16_t event,
50 static void rfc_mx_sm_sabme_wait_ua(tRFC_MCB* p_mcb, uint16_t event,
52 static void rfc_mx_sm_state_wait_sabme(tRFC_MCB* p_mcb, uint16_t event,
54 static void rfc_mx_sm_state_connected(tRFC_MCB* p_mcb, uint16_t event,
56 static void rfc_mx_sm_state_disc_wait_ua(tRFC_MCB* p_mcb, uint16_t event,
59 static void rfc_mx_send_config_req(tRFC_MCB* p_mcb);
60 static void rfc_mx_conf_ind(tRFC_MCB* p_mcb, tL2CAP_CFG_INFO* p_cfg);
61 static void rfc_mx_conf_cnf(tRFC_MCB* p_mcb, uint16_t result);
73 void rfc_mx_sm_execute(tRFC_MCB* p_mcb, uint16_t event, void* p_data) { in rfc_mx_sm_execute() argument
74 CHECK(p_mcb != nullptr) << __func__ << ": NULL mcb for event " << event; in rfc_mx_sm_execute()
77 "RFCOMM peer:%s event:%d state:%s", PRIVATE_ADDRESS(p_mcb->bd_addr), in rfc_mx_sm_execute()
79 rfcomm_mx_state_text(static_cast<tRFC_MX_STATE>(p_mcb->state)).c_str()); in rfc_mx_sm_execute()
81 switch (p_mcb->state) { in rfc_mx_sm_execute()
83 rfc_mx_sm_state_idle(p_mcb, event, p_data); in rfc_mx_sm_execute()
87 rfc_mx_sm_state_wait_conn_cnf(p_mcb, event, p_data); in rfc_mx_sm_execute()
91 rfc_mx_sm_state_configure(p_mcb, event, p_data); in rfc_mx_sm_execute()
95 rfc_mx_sm_sabme_wait_ua(p_mcb, event, p_data); in rfc_mx_sm_execute()
99 rfc_mx_sm_state_wait_sabme(p_mcb, event, p_data); in rfc_mx_sm_execute()
103 rfc_mx_sm_state_connected(p_mcb, event, p_data); in rfc_mx_sm_execute()
107 rfc_mx_sm_state_disc_wait_ua(p_mcb, event, p_data); in rfc_mx_sm_execute()
123 void rfc_mx_sm_state_idle(tRFC_MCB* p_mcb, uint16_t event, void* p_data) { in rfc_mx_sm_state_idle() argument
128 p_mcb->peer_l2cap_mtu = L2CAP_DEFAULT_MTU - RFCOMM_MIN_OFFSET - 1; in rfc_mx_sm_state_idle()
130 uint16_t lcid = L2CA_ConnectReq(BT_PSM_RFCOMM, p_mcb->bd_addr); in rfc_mx_sm_state_idle()
133 << p_mcb->bd_addr; in rfc_mx_sm_state_idle()
134 rfc_save_lcid_mcb(nullptr, p_mcb->lcid); in rfc_mx_sm_state_idle()
135 p_mcb->lcid = 0; in rfc_mx_sm_state_idle()
136 PORT_StartCnf(p_mcb, RFCOMM_ERROR); in rfc_mx_sm_state_idle()
139 p_mcb->lcid = lcid; in rfc_mx_sm_state_idle()
141 rfc_save_lcid_mcb(p_mcb, p_mcb->lcid); in rfc_mx_sm_state_idle()
143 p_mcb->state = RFC_MX_STATE_WAIT_CONN_CNF; in rfc_mx_sm_state_idle()
149 rfc_timer_start(p_mcb, RFCOMM_CONN_TIMEOUT); in rfc_mx_sm_state_idle()
151 rfc_mx_send_config_req(p_mcb); in rfc_mx_sm_state_idle()
153 p_mcb->state = RFC_MX_STATE_CONFIGURE; in rfc_mx_sm_state_idle()
164 rfc_send_dm(p_mcb, RFCOMM_MX_DLCI, true); in rfc_mx_sm_state_idle()
168 rfc_send_dm(p_mcb, RFCOMM_MX_DLCI, false); in rfc_mx_sm_state_idle()
172 RFCOMM_TRACE_ERROR("Mx error state %d event %d", p_mcb->state, event); in rfc_mx_sm_state_idle()
176 p_mcb->state); in rfc_mx_sm_state_idle()
189 void rfc_mx_sm_state_wait_conn_cnf(tRFC_MCB* p_mcb, uint16_t event, in rfc_mx_sm_state_wait_conn_cnf() argument
194 RFCOMM_TRACE_ERROR("Mx error state %d event %d", p_mcb->state, event); in rfc_mx_sm_state_wait_conn_cnf()
201 rfc_mx_conf_ind(p_mcb, (tL2CAP_CFG_INFO*)p_data); in rfc_mx_sm_state_wait_conn_cnf()
206 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_wait_conn_cnf()
208 PORT_StartCnf(p_mcb, *((uint16_t*)p_data)); in rfc_mx_sm_state_wait_conn_cnf()
211 p_mcb->state = RFC_MX_STATE_CONFIGURE; in rfc_mx_sm_state_wait_conn_cnf()
212 rfc_mx_send_config_req(p_mcb); in rfc_mx_sm_state_wait_conn_cnf()
216 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_wait_conn_cnf()
217 PORT_CloseInd(p_mcb); in rfc_mx_sm_state_wait_conn_cnf()
221 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_wait_conn_cnf()
222 L2CA_DisconnectReq(p_mcb->lcid); in rfc_mx_sm_state_wait_conn_cnf()
225 if (p_mcb->pending_lcid) { in rfc_mx_sm_state_wait_conn_cnf()
232 event, p_mcb->state); in rfc_mx_sm_state_wait_conn_cnf()
234 rfc_save_lcid_mcb(NULL, p_mcb->lcid); in rfc_mx_sm_state_wait_conn_cnf()
235 p_mcb->lcid = p_mcb->pending_lcid; in rfc_mx_sm_state_wait_conn_cnf()
236 rfc_save_lcid_mcb(p_mcb, p_mcb->lcid); in rfc_mx_sm_state_wait_conn_cnf()
238 p_mcb->is_initiator = false; in rfc_mx_sm_state_wait_conn_cnf()
242 handle = p_mcb->port_handles[i]; in rfc_mx_sm_state_wait_conn_cnf()
244 p_mcb->port_handles[i] = 0; in rfc_mx_sm_state_wait_conn_cnf()
245 p_mcb->port_handles[i + 1] = handle; in rfc_mx_sm_state_wait_conn_cnf()
252 rfc_mx_sm_execute(p_mcb, RFC_MX_EVENT_CONN_IND, nullptr); in rfc_mx_sm_state_wait_conn_cnf()
254 PORT_CloseInd(p_mcb); in rfc_mx_sm_state_wait_conn_cnf()
259 p_mcb->state); in rfc_mx_sm_state_wait_conn_cnf()
272 void rfc_mx_sm_state_configure(tRFC_MCB* p_mcb, uint16_t event, void* p_data) { in rfc_mx_sm_state_configure() argument
278 RFCOMM_TRACE_ERROR("Mx error state %d event %d", p_mcb->state, event); in rfc_mx_sm_state_configure()
282 rfc_mx_conf_ind(p_mcb, (tL2CAP_CFG_INFO*)p_data); in rfc_mx_sm_state_configure()
286 rfc_mx_conf_cnf(p_mcb, (uintptr_t)p_data); in rfc_mx_sm_state_configure()
290 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_configure()
291 PORT_CloseInd(p_mcb); in rfc_mx_sm_state_configure()
296 << p_mcb->bd_addr; in rfc_mx_sm_state_configure()
297 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_configure()
298 L2CA_DisconnectReq(p_mcb->lcid); in rfc_mx_sm_state_configure()
300 PORT_StartCnf(p_mcb, RFCOMM_ERROR); in rfc_mx_sm_state_configure()
304 p_mcb->state); in rfc_mx_sm_state_configure()
317 void rfc_mx_sm_sabme_wait_ua(tRFC_MCB* p_mcb, uint16_t event, in rfc_mx_sm_sabme_wait_ua() argument
323 RFCOMM_TRACE_ERROR("Mx error state %d event %d", p_mcb->state, event); in rfc_mx_sm_sabme_wait_ua()
338 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_sabme_wait_ua()
339 PORT_CloseInd(p_mcb); in rfc_mx_sm_sabme_wait_ua()
343 rfc_timer_stop(p_mcb); in rfc_mx_sm_sabme_wait_ua()
345 p_mcb->state = RFC_MX_STATE_CONNECTED; in rfc_mx_sm_sabme_wait_ua()
346 p_mcb->peer_ready = true; in rfc_mx_sm_sabme_wait_ua()
348 PORT_StartCnf(p_mcb, RFCOMM_SUCCESS); in rfc_mx_sm_sabme_wait_ua()
352 rfc_timer_stop(p_mcb); in rfc_mx_sm_sabme_wait_ua()
358 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_sabme_wait_ua()
359 L2CA_DisconnectReq(p_mcb->lcid); in rfc_mx_sm_sabme_wait_ua()
361 PORT_StartCnf(p_mcb, RFCOMM_ERROR); in rfc_mx_sm_sabme_wait_ua()
365 p_mcb->state); in rfc_mx_sm_sabme_wait_ua()
378 void rfc_mx_sm_state_wait_sabme(tRFC_MCB* p_mcb, uint16_t event, void* p_data) { in rfc_mx_sm_state_wait_sabme() argument
382 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_wait_sabme()
383 PORT_CloseInd(p_mcb); in rfc_mx_sm_state_wait_sabme()
388 if (p_mcb->pending_lcid) { in rfc_mx_sm_state_wait_sabme()
389 p_mcb->pending_lcid = 0; in rfc_mx_sm_state_wait_sabme()
391 rfc_send_ua(p_mcb, RFCOMM_MX_DLCI); in rfc_mx_sm_state_wait_sabme()
393 rfc_timer_stop(p_mcb); in rfc_mx_sm_state_wait_sabme()
394 p_mcb->state = RFC_MX_STATE_CONNECTED; in rfc_mx_sm_state_wait_sabme()
395 p_mcb->peer_ready = true; in rfc_mx_sm_state_wait_sabme()
398 PORT_StartCnf(p_mcb, RFCOMM_SUCCESS); in rfc_mx_sm_state_wait_sabme()
400 rfc_timer_stop(p_mcb); in rfc_mx_sm_state_wait_sabme()
401 PORT_StartInd(p_mcb); in rfc_mx_sm_state_wait_sabme()
407 rfc_send_dm(p_mcb, RFCOMM_MX_DLCI, true); in rfc_mx_sm_state_wait_sabme()
409 rfc_send_ua(p_mcb, RFCOMM_MX_DLCI); in rfc_mx_sm_state_wait_sabme()
411 p_mcb->state = RFC_MX_STATE_CONNECTED; in rfc_mx_sm_state_wait_sabme()
412 p_mcb->peer_ready = true; in rfc_mx_sm_state_wait_sabme()
413 PORT_StartCnf(p_mcb, RFCOMM_SUCCESS); in rfc_mx_sm_state_wait_sabme()
420 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_wait_sabme()
421 L2CA_DisconnectReq(p_mcb->lcid); in rfc_mx_sm_state_wait_sabme()
423 PORT_CloseInd(p_mcb); in rfc_mx_sm_state_wait_sabme()
427 p_mcb->state); in rfc_mx_sm_state_wait_sabme()
440 void rfc_mx_sm_state_connected(tRFC_MCB* p_mcb, uint16_t event, in rfc_mx_sm_state_connected() argument
447 rfc_timer_start(p_mcb, RFC_DISC_TIMEOUT); in rfc_mx_sm_state_connected()
448 p_mcb->state = RFC_MX_STATE_DISC_WAIT_UA; in rfc_mx_sm_state_connected()
449 rfc_send_disc(p_mcb, RFCOMM_MX_DLCI); in rfc_mx_sm_state_connected()
453 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_connected()
454 PORT_CloseInd(p_mcb); in rfc_mx_sm_state_connected()
460 rfc_send_ua(p_mcb, RFCOMM_MX_DLCI); in rfc_mx_sm_state_connected()
461 if (p_mcb->is_initiator) { in rfc_mx_sm_state_connected()
462 L2CA_DisconnectReq(p_mcb->lcid); in rfc_mx_sm_state_connected()
465 PORT_CloseInd(p_mcb); in rfc_mx_sm_state_connected()
469 p_mcb->state); in rfc_mx_sm_state_connected()
482 void rfc_mx_sm_state_disc_wait_ua(tRFC_MCB* p_mcb, uint16_t event, in rfc_mx_sm_state_disc_wait_ua() argument
491 L2CA_DisconnectReq(p_mcb->lcid); in rfc_mx_sm_state_disc_wait_ua()
493 if (p_mcb->restart_required) { in rfc_mx_sm_state_disc_wait_ua()
495 uint16_t lcid = L2CA_ConnectReq(BT_PSM_RFCOMM, p_mcb->bd_addr); in rfc_mx_sm_state_disc_wait_ua()
497 rfc_save_lcid_mcb(NULL, p_mcb->lcid); in rfc_mx_sm_state_disc_wait_ua()
498 p_mcb->lcid = 0; in rfc_mx_sm_state_disc_wait_ua()
499 PORT_StartCnf(p_mcb, RFCOMM_ERROR); in rfc_mx_sm_state_disc_wait_ua()
502 p_mcb->lcid = lcid; in rfc_mx_sm_state_disc_wait_ua()
504 rfc_save_lcid_mcb(p_mcb, p_mcb->lcid); in rfc_mx_sm_state_disc_wait_ua()
507 while ((p_buf = (BT_HDR*)fixed_queue_try_dequeue(p_mcb->cmd_q)) != NULL) in rfc_mx_sm_state_disc_wait_ua()
510 rfc_timer_start(p_mcb, RFC_MCB_INIT_INACT_TIMER); in rfc_mx_sm_state_disc_wait_ua()
512 p_mcb->is_initiator = true; in rfc_mx_sm_state_disc_wait_ua()
513 p_mcb->restart_required = false; in rfc_mx_sm_state_disc_wait_ua()
515 p_mcb->state = RFC_MX_STATE_WAIT_CONN_CNF; in rfc_mx_sm_state_disc_wait_ua()
518 rfc_release_multiplexer_channel(p_mcb); in rfc_mx_sm_state_disc_wait_ua()
522 rfc_send_ua(p_mcb, RFCOMM_MX_DLCI); in rfc_mx_sm_state_disc_wait_ua()
527 rfc_send_dm(p_mcb, RFCOMM_MX_DLCI, false); in rfc_mx_sm_state_disc_wait_ua()
531 p_mcb->restart_required = true; in rfc_mx_sm_state_disc_wait_ua()
535 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_mx_sm_state_disc_wait_ua()
536 PORT_CloseInd(p_mcb); in rfc_mx_sm_state_disc_wait_ua()
546 p_mcb->state); in rfc_mx_sm_state_disc_wait_ua()
557 static void rfc_mx_send_config_req(tRFC_MCB* p_mcb) { in rfc_mx_send_config_req() argument
562 tRFC_MCB* p_mcb = rfc_find_lcid_mcb(lcid); in rfc_on_l2cap_error() local
563 if (p_mcb == nullptr) return; in rfc_on_l2cap_error()
568 if (p_mcb->pending_lcid) { in rfc_on_l2cap_error()
571 p_mcb->pending_lcid); in rfc_on_l2cap_error()
574 rfc_save_lcid_mcb(NULL, p_mcb->lcid); in rfc_on_l2cap_error()
576 p_mcb->lcid = p_mcb->pending_lcid; in rfc_on_l2cap_error()
577 p_mcb->is_initiator = false; in rfc_on_l2cap_error()
578 p_mcb->state = RFC_MX_STATE_IDLE; in rfc_on_l2cap_error()
581 rfc_save_lcid_mcb(p_mcb, p_mcb->lcid); in rfc_on_l2cap_error()
585 uint8_t handle = p_mcb->port_handles[i]; in rfc_on_l2cap_error()
587 p_mcb->port_handles[i] = 0; in rfc_on_l2cap_error()
588 p_mcb->port_handles[i + 1] = handle; in rfc_on_l2cap_error()
594 rfc_mx_sm_execute(p_mcb, RFC_MX_EVENT_CONN_IND, nullptr); in rfc_on_l2cap_error()
595 if (p_mcb->pending_configure_complete) { in rfc_on_l2cap_error()
597 p_mcb->pending_configure_complete = false; in rfc_on_l2cap_error()
599 rfc_mx_sm_execute(p_mcb, RFC_MX_EVENT_CONF_IND, in rfc_on_l2cap_error()
600 &p_mcb->pending_cfg_info); in rfc_on_l2cap_error()
601 rfc_mx_sm_execute(p_mcb, RFC_MX_EVENT_CONF_CNF, (void*)result_as_ptr); in rfc_on_l2cap_error()
606 p_mcb->lcid = lcid; in rfc_on_l2cap_error()
607 rfc_mx_sm_execute(p_mcb, RFC_MX_EVENT_CONN_CNF, &result); in rfc_on_l2cap_error()
610 << p_mcb->bd_addr; in rfc_on_l2cap_error()
611 if (p_mcb->is_initiator) { in rfc_on_l2cap_error()
613 << p_mcb->bd_addr; in rfc_on_l2cap_error()
614 PORT_StartCnf(p_mcb, result); in rfc_on_l2cap_error()
615 L2CA_DisconnectReq(p_mcb->lcid); in rfc_on_l2cap_error()
617 rfc_release_multiplexer_channel(p_mcb); in rfc_on_l2cap_error()
631 static void rfc_mx_conf_cnf(tRFC_MCB* p_mcb, uint16_t result) { in rfc_mx_conf_cnf() argument
632 if (p_mcb->state == RFC_MX_STATE_CONFIGURE) { in rfc_mx_conf_cnf()
633 if (p_mcb->is_initiator) { in rfc_mx_conf_cnf()
634 p_mcb->state = RFC_MX_STATE_SABME_WAIT_UA; in rfc_mx_conf_cnf()
635 rfc_send_sabme(p_mcb, RFCOMM_MX_DLCI); in rfc_mx_conf_cnf()
636 rfc_timer_start(p_mcb, RFC_T1_TIMEOUT); in rfc_mx_conf_cnf()
638 p_mcb->state = RFC_MX_STATE_WAIT_SABME; in rfc_mx_conf_cnf()
640 p_mcb, RFCOMM_CONN_TIMEOUT); /* - increased from T2=20 to CONN=120 in rfc_mx_conf_cnf()
655 static void rfc_mx_conf_ind(tRFC_MCB* p_mcb, tL2CAP_CFG_INFO* p_cfg) { in rfc_mx_conf_ind() argument
659 p_mcb->peer_l2cap_mtu = p_cfg->mtu - RFCOMM_MIN_OFFSET - 1; in rfc_mx_conf_ind()
661 p_mcb->peer_l2cap_mtu = L2CAP_DEFAULT_MTU - RFCOMM_MIN_OFFSET - 1; in rfc_mx_conf_ind()