/******************************************************************************* ** ** Function gatt_cl_send_next_cmd_inq ** ** Description Find next command in queue and sent to server ** ** Returns TRUE if command sent, otherwise FALSE. ** *******************************************************************************/ BOOLEAN gatt_cl_send_next_cmd_inq(tGATT_TCB *p_tcb) { tGATT_CMD_Q *p_cmd = &p_tcb->cl_cmd_q[p_tcb->pending_cl_req]; BOOLEAN sent = FALSE; UINT8 rsp_code; tGATT_CLCB *p_clcb = NULL; tGATT_STATUS att_ret = GATT_SUCCESS; while (!sent && p_tcb->pending_cl_req != p_tcb->next_slot_inq && p_cmd->to_send && p_cmd->p_cmd != NULL) { att_ret = attp_send_msg_to_l2cap(p_tcb, p_cmd->p_cmd); if (att_ret == GATT_SUCCESS || att_ret == GATT_CONGESTED) { sent = TRUE; p_cmd->to_send = FALSE; p_cmd->p_cmd = NULL; /* dequeue the request if is write command or sign write */ if (p_cmd->op_code != GATT_CMD_WRITE && p_cmd->op_code != GATT_SIGN_CMD_WRITE) { gatt_start_rsp_timer (p_cmd->clcb_idx); } else { p_clcb = gatt_cmd_dequeue(p_tcb, &rsp_code); /* if no ack needed, keep sending */ if (att_ret == GATT_SUCCESS) sent = FALSE; p_cmd = &p_tcb->cl_cmd_q[p_tcb->pending_cl_req]; /* send command complete callback here */ gatt_end_operation(p_clcb, att_ret, NULL); } } else { GATT_TRACE_ERROR("gatt_cl_send_next_cmd_inq: L2CAP sent error"); memset(p_cmd, 0, sizeof(tGATT_CMD_Q)); p_tcb->pending_cl_req ++; p_cmd = &p_tcb->cl_cmd_q[p_tcb->pending_cl_req]; } } return sent; }
/******************************************************************************* ** ** Function gatt_client_handle_server_rsp ** ** Description This function is called to handle the server response to ** client. ** ** ** Returns void ** *******************************************************************************/ void gatt_client_handle_server_rsp (tGATT_TCB *p_tcb, UINT8 op_code, UINT16 len, UINT8 *p_data) { tGATT_CLCB *p_clcb = NULL; UINT8 rsp_code; if (op_code != GATT_HANDLE_VALUE_IND && op_code != GATT_HANDLE_VALUE_NOTIF) { p_clcb = gatt_cmd_dequeue(p_tcb, &rsp_code); rsp_code = gatt_cmd_to_rsp_code(rsp_code); if (p_clcb == NULL || (rsp_code != op_code && op_code != GATT_RSP_ERROR)) { GATT_TRACE_WARNING ("ATT - Ignore wrong response. Receives (%02x) \ Request(%02x) Ignored", op_code, rsp_code); return; } else {