/******************************************************************************* ** ** Function RFCOMM_ParNegRsp ** ** Description This function is called by the user app to acknowledge ** DLC parameter negotiation. ** *******************************************************************************/ void RFCOMM_ParNegRsp (tRFC_MCB *p_mcb, UINT8 dlci, UINT16 mtu, UINT8 cl, UINT8 k) { if (p_mcb->state != RFC_MX_STATE_CONNECTED) return; /* Send Parameter Negotiation Response UIH frame */ rfc_send_pn (p_mcb, dlci, FALSE, mtu, cl, k); }
/******************************************************************************* ** ** Function RFCOMM_ParNegReq ** ** Description This function is called by the user app to start ** DLC parameter negotiation. Port emulation can send this ** request before actually establishing the DLC. In this ** case the function will allocate RFCOMM connection control ** block. ** *******************************************************************************/ void RFCOMM_ParNegReq (tRFC_MCB *p_mcb, UINT8 dlci, UINT16 mtu) { UINT8 flow; UINT8 cl; UINT8 k; tPORT *p_port = port_find_mcb_dlci_port(p_mcb, dlci); if (p_port == NULL) { RFCOMM_TRACE_WARNING("%s Unable to find DLCI port dlci:%d", __func__, dlci); return; } if (p_mcb->state != RFC_MX_STATE_CONNECTED) { p_port->error = PORT_PAR_NEG_FAILED; return; } /* Negotiate the flow control mechanism. If flow control mechanism for */ /* mux has not been set yet, use our default value. If it has been set, */ /* use that value. */ flow = (p_mcb->flow == PORT_FC_UNDEFINED) ? PORT_FC_DEFAULT : p_mcb->flow; /* Set convergence layer and number of credits (k) */ if (flow == PORT_FC_CREDIT) { cl = RFCOMM_PN_CONV_LAYER_CBFC_I; k = (p_port->credit_rx_max < RFCOMM_K_MAX) ? p_port->credit_rx_max : RFCOMM_K_MAX; p_port->credit_rx = k; } else { cl = RFCOMM_PN_CONV_LAYER_TYPE_1; k = 0; } /* Send Parameter Negotiation Command UIH frame */ p_port->rfc.expected_rsp |= RFC_RSP_PN; rfc_send_pn (p_mcb, dlci, TRUE, mtu, cl, k); rfc_port_timer_start (p_port, RFC_T2_TIMEOUT) ; }