Home | History | Annotate | Download | only in llcp

Lines Matching refs:p_dlcb

34 static tLLCP_STATUS llcp_dlsm_idle (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data);
35 static tLLCP_STATUS llcp_dlsm_w4_remote_resp (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data);
36 static tLLCP_STATUS llcp_dlsm_w4_local_resp (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data);
37 static tLLCP_STATUS llcp_dlsm_connected (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data);
38 static tLLCP_STATUS llcp_dlsm_w4_remote_dm (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data);
54 tLLCP_STATUS llcp_dlsm_execute (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data)
60 p_dlcb->local_sap,
61 llcp_dlsm_get_state_name (p_dlcb->state),
64 LLCP_TRACE_EVENT3 ("DLC (0x%02X) - state: %d, evt: %d", p_dlcb->local_sap, p_dlcb->state, event);
67 switch (p_dlcb->state)
70 status = llcp_dlsm_idle (p_dlcb, event, p_data);
74 status = llcp_dlsm_w4_remote_resp (p_dlcb, event, p_data);
78 status = llcp_dlsm_w4_local_resp (p_dlcb, event, p_data);
82 status = llcp_dlsm_connected (p_dlcb, event, p_data);
86 status = llcp_dlsm_w4_remote_dm (p_dlcb, event, p_data);
106 static tLLCP_STATUS llcp_dlsm_idle (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data)
119 status = llcp_util_send_connect (p_dlcb, p_params);
123 p_dlcb->local_miu = p_params->miu;
124 p_dlcb->local_rw = p_params->rw;
127 p_dlcb->state = LLCP_DLC_STATE_W4_REMOTE_RESP;
129 nfc_start_quick_timer (&p_dlcb->timer, NFC_TTYPE_LLCP_DATA_LINK,
146 data.connect_ind.remote_sap = p_dlcb->remote_sap;
147 data.connect_ind.local_sap = p_dlcb->local_sap;
151 data.connect_ind.server_sap = p_dlcb->local_sap;
153 p_dlcb->remote_miu = p_params->miu;
154 p_dlcb->remote_rw = p_params->rw;
156 LLCP_TRACE_DEBUG2 ("llcp_dlsm_idle (): Remote MIU:%d, RW:%d", p_dlcb->remote_miu, p_dlcb->remote_rw);
159 p_dlcb->state = LLCP_DLC_STATE_W4_LOCAL_RESP;
161 nfc_start_quick_timer (&p_dlcb->timer, NFC_TTYPE_LLCP_DATA_LINK,
164 (*p_dlcb->p_app_cb->p_app_cback) (&data);
186 static tLLCP_STATUS llcp_dlsm_w4_remote_resp (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data)
197 nfc_stop_quick_timer (&p_dlcb->timer);
208 p_dlcb->remote_miu = p_params->miu;
209 p_dlcb->remote_rw = p_params->rw;
211 LLCP_TRACE_DEBUG2 ("llcp_dlsm_w4_remote_resp (): Remote MIU:%d, RW:%d", p_dlcb->remote_miu, p_dlcb->remote_rw);
213 p_dlcb->state = LLCP_DLC_STATE_CONNECTED;
217 data.connect_resp.remote_sap = p_dlcb->remote_sap;
218 data.connect_resp.local_sap = p_dlcb->local_sap;
222 (*p_dlcb->p_app_cb->p_app_cback) (&data);
226 p_dlcb->flags |= LLCP_DATA_LINK_FLAG_PENDING_RR_RNR;
235 data.disconnect_resp.local_sap = p_dlcb->local_sap;
236 data.disconnect_resp.remote_sap = p_dlcb->remote_sap;
238 (*p_dlcb->p_app_cb->p_app_cback) (&data);
241 llcp_util_deallocate_data_link (p_dlcb);
251 data.disconnect_ind.local_sap = p_dlcb->local_sap;
252 data.disconnect_ind.remote_sap = p_dlcb->remote_sap;
253 (*p_dlcb->p_app_cb->p_app_cback) (&data);
255 llcp_util_deallocate_data_link (p_dlcb);
277 static tLLCP_STATUS llcp_dlsm_w4_local_resp (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data)
289 nfc_stop_quick_timer (&p_dlcb->timer);
293 p_dlcb->local_miu = p_params->miu;
294 p_dlcb->local_rw = p_params->rw;
296 p_dlcb->state = LLCP_DLC_STATE_CONNECTED;
300 p_dlcb->flags |= LLCP_DATA_LINK_FLAG_PENDING_RR_RNR;
303 status = llcp_util_send_cc (p_dlcb, p_params);
312 data.disconnect_ind.local_sap = p_dlcb->local_sap;
313 data.disconnect_ind.remote_sap = p_dlcb->remote_sap;
314 (*p_dlcb->p_app_cb->p_app_cback) (&data);
316 llcp_util_deallocate_data_link (p_dlcb);
329 llcp_util_send_dm (p_dlcb->remote_sap, p_dlcb->local_sap, reason);
332 llcp_util_deallocate_data_link (p_dlcb);
341 data.disconnect_ind.local_sap = p_dlcb->local_sap;
342 data.disconnect_ind.remote_sap = p_dlcb->remote_sap;
343 (*p_dlcb->p_app_cb->p_app_cback) (&data);
345 llcp_util_deallocate_data_link (p_dlcb);
367 static tLLCP_STATUS llcp_dlsm_connected (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data)
385 ||( (p_dlcb->i_xmit_q.count == 0)
386 &&(p_dlcb->next_rx_seq == p_dlcb->sent_ack_seq)
387 &&(p_dlcb->next_tx_seq == p_dlcb->rcvd_ack_seq) ) )
390 p_dlcb->state = LLCP_DLC_STATE_W4_REMOTE_DM;
392 llcp_util_send_disc (p_dlcb->remote_sap, p_dlcb->local_sap );
394 nfc_start_quick_timer (&p_dlcb->timer, NFC_TTYPE_LLCP_DATA_LINK,
400 p_dlcb->flags |= LLCP_DATA_LINK_FLAG_PENDING_DISC;
409 llcp_util_send_dm (p_dlcb->remote_sap, p_dlcb->local_sap, LLCP_SAP_DM_REASON_RESP_DISC );
412 data.disconnect_ind.local_sap = p_dlcb->local_sap;
413 data.disconnect_ind.remote_sap = p_dlcb->remote_sap;
414 (*p_dlcb->p_app_cb->p_app_cback) (&data);
416 llcp_util_deallocate_data_link (p_dlcb);
425 if (p_dlcb->remote_rw)
428 GKI_enqueue (&p_dlcb->i_xmit_q, p_data);
433 if ( (p_dlcb->is_tx_congested)
435 ||(p_dlcb->remote_busy)
436 ||(p_dlcb->i_xmit_q.count >= p_dlcb->remote_rw) ) /*if enough data to send next round */
439 p_dlcb->local_sap, p_dlcb->remote_sap, p_dlcb->i_xmit_q.count);
442 p_dlcb->is_tx_congested = TRUE;
458 data.data_ind.local_sap = p_dlcb->local_sap;
460 data.data_ind.remote_sap = p_dlcb->remote_sap;
462 (*p_dlcb->p_app_cb->p_app_cback) (&data);
470 data.disconnect_ind.local_sap = p_dlcb->local_sap;
471 data.disconnect_ind.remote_sap = p_dlcb->remote_sap;
472 (*p_dlcb->p_app_cb->p_app_cback) (&data);
474 llcp_util_deallocate_data_link (p_dlcb);
496 static tLLCP_STATUS llcp_dlsm_w4_remote_dm (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data)
508 data.disconnect_resp.local_sap = p_dlcb->local_sap;
509 data.disconnect_resp.remote_sap = p_dlcb->remote_sap;
511 (*p_dlcb->p_app_cb->p_app_cback) (&data);
513 llcp_util_deallocate_data_link (p_dlcb);
522 data.disconnect_ind.local_sap = p_dlcb->local_sap;
523 data.disconnect_ind.remote_sap = p_dlcb->remote_sap;
524 (*p_dlcb->p_app_cb->p_app_cback) (&data);
526 llcp_util_deallocate_data_link (p_dlcb);
535 llcp_util_send_dm (p_dlcb->remote_sap, p_dlcb->local_sap, LLCP_SAP_DM_REASON_RESP_DISC );
590 void llcp_dlc_flush_q (tLLCP_DLCB *p_dlcb)
592 if (p_dlcb)
594 LLCP_TRACE_DEBUG1 ("llcp_dlc_flush_q (): local SAP:0x%02X", p_dlcb->local_sap);
597 while (p_dlcb->i_xmit_q.p_first)
599 GKI_freebuf (GKI_dequeue (&p_dlcb->i_xmit_q));
604 LLCP_FlushDataLinkRxData (p_dlcb->local_sap, p_dlcb->remote_sap);
608 LLCP_TRACE_ERROR0 ("llcp_dlc_flush_q (): p_dlcb is NULL");
623 tLLCP_DLCB *p_dlcb;
702 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, ssap);
703 if (p_dlcb)
711 p_dlcb = llcp_util_allocate_data_link (dsap, ssap);
713 if (p_dlcb)
715 status = llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_PEER_CONNECT_IND, &params);
719 llcp_util_deallocate_data_link (p_dlcb);
741 tLLCP_DLCB *p_dlcb;
745 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, ssap);
746 if (p_dlcb)
752 llcp_util_send_frmr (p_dlcb, LLCP_FRMR_W_ERROR_FLAG|LLCP_FRMR_I_ERROR_FLAG, LLCP_PDU_DISC_TYPE, 0);
753 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_FRAME_ERROR, NULL);
757 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_PEER_DISCONNECT_IND, NULL);
777 tLLCP_DLCB *p_dlcb;
784 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, LLCP_INVALID_SAP);
785 if (p_dlcb)
788 p_dlcb->remote_sap = ssap;
792 status = llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_PEER_CONNECT_CFM, &params);
796 llcp_util_deallocate_data_link (p_dlcb);
801 llcp_util_send_frmr (p_dlcb, LLCP_FRMR_W_ERROR_FLAG|LLCP_FRMR_I_ERROR_FLAG, LLCP_PDU_DISC_TYPE, 0);
802 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_FRAME_ERROR, NULL);
822 tLLCP_DLCB *p_dlcb;
835 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, ssap);
841 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, LLCP_INVALID_SAP);
844 if (p_dlcb)
846 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_PEER_DISCONNECT_RESP, p_data); /* passing reason */
868 tLLCP_DLCB *p_dlcb;
874 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, ssap);
876 if ((p_dlcb)&&(p_dlcb->state == LLCP_DLC_STATE_CONNECTED))
888 if (info_len > p_dlcb->local_miu)
891 p_dlcb->local_miu, info_len);
905 p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq,
906 p_dlcb->next_rx_seq, p_dlcb->sent_ack_seq);
910 if (p_dlcb->next_rx_seq != send_seq)
913 send_seq, p_dlcb->next_rx_seq);
920 if ((UINT8) (send_seq - p_dlcb->sent_ack_seq) % LLCP_SEQ_MODULO >= p_dlcb->local_rw)
923 send_seq, p_dlcb->sent_ack_seq, p_dlcb->local_rw);
930 if ((UINT8) (rcv_seq - p_dlcb->rcvd_ack_seq) % LLCP_SEQ_MODULO + (UINT8) (p_dlcb->next_tx_seq - rcv_seq) % LLCP_SEQ_MODULO
931 != (UINT8) (p_dlcb->next_tx_seq - p_dlcb->rcvd_ack_seq) % LLCP_SEQ_MODULO)
935 rcv_seq, p_dlcb->rcvd_ack_seq, p_dlcb->next_tx_seq);
941 llcp_util_send_frmr (p_dlcb, error_flags, LLCP_PDU_I_TYPE, *p);
942 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_FRAME_ERROR, NULL);
947 p_dlcb->next_rx_seq = (p_dlcb->next_rx_seq + 1) % LLCP_SEQ_MODULO;
948 p_dlcb->rcvd_ack_seq = rcv_seq;
953 p_dlcb->i_rx_q);
1026 GKI_enqueue (&p_dlcb->i_rx_q, p_msg);
1034 p_dlcb->num_rx_i_pdu++;
1036 if ( (!p_dlcb->local_busy)
1037 &&(p_dlcb->num_rx_i_pdu == 1) )
1040 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_PEER_DATA_IND, NULL);
1043 if ( (!p_dlcb->is_rx_congested)
1044 &&(p_dlcb->num_rx_i_pdu >= p_dlcb->rx_congest_threshold) )
1047 p_dlcb->num_rx_i_pdu, p_dlcb->rx_congest_threshold);
1050 p_dlcb->is_rx_congested = TRUE;
1051 p_dlcb->flags |= LLCP_DATA_LINK_FLAG_PENDING_RR_RNR;
1079 tLLCP_DLCB *p_dlcb;
1086 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, ssap);
1087 if (p_dlcb != NULL)
1099 if ((UINT8) (rcv_seq - p_dlcb->rcvd_ack_seq) % LLCP_SEQ_MODULO + (UINT8) (p_dlcb->next_tx_seq - rcv_seq) % LLCP_SEQ_MODULO
1100 != (UINT8) (p_dlcb->next_tx_seq - p_dlcb->rcvd_ack_seq) % LLCP_SEQ_MODULO )
1104 rcv_seq, p_dlcb->rcvd_ack_seq, p_dlcb->next_tx_seq);
1109 llcp_util_send_frmr (p_dlcb, error_flags, ptype, *p_data);
1110 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_FRAME_ERROR, NULL);
1114 p_dlcb->rcvd_ack_seq = rcv_seq;
1119 p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq,
1120 p_dlcb->next_rx_seq, p_dlcb->sent_ack_seq);
1122 old_remote_busy = p_dlcb->remote_busy;
1125 p_dlcb->remote_busy = TRUE;
1128 &&(!p_dlcb->is_tx_congested) )
1131 p_dlcb->local_sap, p_dlcb->remote_sap,
1132 p_dlcb->i_xmit_q.count);
1135 cback_data.congest.local_sap = p_dlcb->local_sap;
1136 cback_data.congest.remote_sap = p_dlcb->remote_sap;
1140 (*p_dlcb->p_app_cb->p_app_cback) (&cback_data);
1145 p_dlcb->remote_busy = FALSE;
1148 &&(!p_dlcb->is_tx_congested) )
1151 p_dlcb->local_sap, p_dlcb->remote_sap,
1152 p_dlcb->i_xmit_q.count);
1155 cback_data.congest.local_sap = p_dlcb->local_sap;
1156 cback_data.congest.remote_sap = p_dlcb->remote_sap;
1160 (*p_dlcb->p_app_cb->p_app_cback) (&cback_data);
1165 if (p_dlcb->flags & LLCP_DATA_LINK_FLAG_PENDING_DISC)
1168 if ( (p_dlcb->i_xmit_q.count == 0)
1169 &&(p_dlcb->next_rx_seq == p_dlcb->sent_ack_seq)
1170 &&(p_dlcb->next_tx_seq == p_dlcb->rcvd_ack_seq) )
1172 p_dlcb->flags &= ~LLCP_DATA_LINK_FLAG_PENDING_DISC;
1173 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_API_DISCONNECT_REQ, &flush);
1195 tLLCP_DLCB *p_dlcb;
1225 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, ssap);
1226 if (p_dlcb)
1228 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_FRAME_ERROR, NULL);
1240 p_dlcb = llcp_dlc_find_dlcb_by_sap (dsap, ssap);
1241 if (p_dlcb)
1243 llcp_util_send_frmr (p_dlcb, LLCP_FRMR_W_ERROR_FLAG, ptype, 0);
1244 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_FRAME_ERROR, NULL);
1305 BOOLEAN llcp_dlc_is_rw_open (tLLCP_DLCB *p_dlcb)
1307 if ((UINT8) (p_dlcb->next_tx_seq - p_dlcb->rcvd_ack_seq) % LLCP_SEQ_MODULO < p_dlcb->remote_rw)
1314 p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq, p_dlcb->remote_rw);
1328 BT_HDR* llcp_dlc_get_next_pdu (tLLCP_DLCB *p_dlcb)
1335 UINT8 send_seq = p_dlcb->next_tx_seq;
1339 if ( (p_dlcb->i_xmit_q.count)
1340 &&(!p_dlcb->remote_busy)
1341 &&(llcp_dlc_is_rw_open (p_dlcb)) )
1343 p_msg = (BT_HDR *) GKI_dequeue (&p_dlcb->i_xmit_q);
1349 llcp_util_build_info_pdu (p_dlcb, p_msg);
1351 p_dlcb->next_tx_seq = (p_dlcb->next_tx_seq + 1) % LLCP_SEQ_MODULO;
1355 send_seq, p_dlcb->next_rx_seq,
1356 p_dlcb->next_tx_seq, p_dlcb->rcvd_ack_seq,
1357 p_dlcb->next_rx_seq, p_dlcb->sent_ack_seq);
1370 if ( (p_dlcb->i_xmit_q.count == 0)
1371 &&(p_dlcb->next_rx_seq == p_dlcb->sent_ack_seq)
1372 &&(p_dlcb->next_tx_seq == p_dlcb->rcvd_ack_seq) )
1375 if (p_dlcb->flags & LLCP_DATA_LINK_FLAG_PENDING_DISC)
1377 p_dlcb->flags &= ~LLCP_DATA_LINK_FLAG_PENDING_DISC;
1378 llcp_dlsm_execute (p_dlcb, LLCP_DLC_EVENT_API_DISCONNECT_REQ, &flush);
1382 if (p_dlcb->flags & LLCP_DATA_LINK_FLAG_NOTIFY_TX_DONE)
1384 p_dlcb->flags &= ~LLCP_DATA_LINK_FLAG_NOTIFY_TX_DONE;
1387 data.tx_complete.local_sap = p_dlcb->local_sap;
1388 data.tx_complete.remote_sap = p_dlcb->remote_sap;
1390 (*p_dlcb->p_app_cb->p_app_cback) (&data);
1406 UINT16 llcp_dlc_get_next_pdu_length (tLLCP_DLCB *p_dlcb)
1411 if ( (p_dlcb->i_xmit_q.count)
1412 &&(!p_dlcb->remote_busy)
1413 &&(llcp_dlc_is_rw_open (p_dlcb)) )
1415 p_msg = (BT_HDR *) p_dlcb->i_xmit_q.p_first;