Home | History | Annotate | Download | only in gatt

Lines Matching refs:p_tcb

46 UINT32 gatt_sr_enqueue_cmd (tGATT_TCB *p_tcb, UINT8 op_code, UINT16 handle)
48 tGATT_SR_CMD *p_cmd = &p_tcb->sr_cmd;
59 trans_id = ++p_tcb->trans_id;
63 p_cmd->trans_id = ++p_tcb->trans_id;
67 p_tcb->trans_id %= GATT_TRANS_ID_MAX;
84 BOOLEAN gatt_sr_cmd_empty (tGATT_TCB *p_tcb)
86 return(p_tcb->sr_cmd.op_code == 0);
98 void gatt_dequeue_sr_cmd (tGATT_TCB *p_tcb)
102 if (p_tcb->sr_cmd.p_rsp_msg)
104 GATT_TRACE_ERROR("free p_tcb->sr_cmd.p_rsp_msg = %d", p_tcb->sr_cmd.p_rsp_msg);
106 GKI_freebuf (p_tcb->sr_cmd.p_rsp_msg);
109 while (GKI_getfirst(&p_tcb->sr_cmd.multi_rsp_q))
110 GKI_freebuf (GKI_dequeue (&p_tcb->sr_cmd.multi_rsp_q));
111 memset( &p_tcb->sr_cmd, 0, sizeof(tGATT_SR_CMD));
261 tGATT_STATUS gatt_sr_process_app_rsp (tGATT_TCB *p_tcb, tGATT_IF gatt_if,
270 gatt_sr_update_cback_cnt(p_tcb, gatt_if, FALSE, FALSE);
275 if (!process_read_multi_rsp (&p_tcb->sr_cmd, status, p_msg, p_tcb->payload_size))
281 gatt_sr_update_prep_cnt(p_tcb, gatt_if, TRUE, FALSE);
284 gatt_sr_reset_cback_cnt(p_tcb);
286 p_tcb->sr_cmd.status = status;
288 if (gatt_sr_is_cback_cnt_zero(p_tcb)
291 if (p_tcb->sr_cmd.p_rsp_msg == NULL)
293 p_tcb->sr_cmd.p_rsp_msg = attp_build_sr_msg (p_tcb, (UINT8)(op_code + 1), (tGATT_SR_MSG *)p_msg);
301 if (gatt_sr_is_cback_cnt_zero(p_tcb))
303 if ( (p_tcb->sr_cmd.status == GATT_SUCCESS) && (p_tcb->sr_cmd.p_rsp_msg) )
305 ret_code = attp_send_sr_msg (p_tcb, p_tcb->sr_cmd.p_rsp_msg);
306 p_tcb->sr_cmd.p_rsp_msg = NULL;
310 ret_code = gatt_send_error_rsp (p_tcb, status, op_code, p_tcb->sr_cmd.handle, FALSE);
313 gatt_dequeue_sr_cmd(p_tcb);
331 void gatt_process_exec_write_req (tGATT_TCB *p_tcb, UINT8 op_code, UINT16 len, UINT8 *p_data)
346 gatt_send_error_rsp (p_tcb, gatt_cb.err_status, gatt_cb.req_op_code, gatt_cb.handle, FALSE);
359 if (!gatt_sr_is_prep_cnt_zero(p_tcb))
361 trans_id = gatt_sr_enqueue_cmd(p_tcb, op_code, 0);
362 gatt_sr_copy_prep_cnt_to_cback_cnt(p_tcb);
366 if (p_tcb->prep_cnt[i])
369 conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, gatt_if);
374 p_tcb->prep_cnt[i]= 0;
381 gatt_send_error_rsp(p_tcb, GATT_ERROR, GATT_REQ_EXEC_WRITE, 0, FALSE);
395 void gatt_process_read_multi_req (tGATT_TCB *p_tcb, UINT8 op_code, UINT16 len, UINT8 *p_data)
405 p_tcb->sr_cmd.multi_req.num_handles = 0;
407 gatt_sr_get_sec_info(p_tcb->peer_bda,
408 p_tcb->transport,
419 gatt_send_error_rsp (p_tcb, gatt_cb.err_status, gatt_cb.req_op_code, handle, FALSE);
425 while (ll >= 2 && p_tcb->sr_cmd.multi_req.num_handles < GATT_MAX_READ_MULTI_HANDLES)
431 p_tcb->sr_cmd.multi_req.handles[p_tcb->sr_cmd.multi_req.num_handles++] = handle;
459 if (p_tcb->sr_cmd.multi_req.num_handles == 0)
464 if ((trans_id = gatt_sr_enqueue_cmd (p_tcb, op_code, p_tcb->sr_cmd.multi_req.handles[0])) != 0)
466 gatt_sr_reset_cback_cnt(p_tcb); /* read multiple use multi_rsp_q's count*/
468 for (ll = 0; ll < p_tcb->sr_cmd.multi_req.num_handles; ll ++)
474 handle = p_tcb->sr_cmd.multi_req.handles[ll];
478 err = gatts_read_attr_value_by_handle(p_tcb,
492 gatt_sr_process_app_rsp(p_tcb, gatt_cb.sr_reg[i_rcb].gatt_if ,trans_id, op_code, GATT_SUCCESS, p_msg);
500 gatt_dequeue_sr_cmd(p_tcb);
511 gatt_send_error_rsp(p_tcb, err, op_code, handle, FALSE);
524 static tGATT_STATUS gatt_build_primary_service_rsp (BT_HDR *p_msg, tGATT_TCB *p_tcb,
569 if (p_msg->len + p_msg->offset <= p_tcb->payload_size &&
762 void gatts_process_primary_service_req(tGATT_TCB *p_tcb, UINT8 op_code, UINT16 len, UINT8 *p_data)
768 UINT16 msg_len = (UINT16)(sizeof(BT_HDR) + p_tcb->payload_size + L2CAP_MIN_OFFSET);
793 reason = gatt_build_primary_service_rsp (p_msg, p_tcb, op_code, s_hdl, e_hdl, p_data, value);
816 gatt_send_error_rsp (p_tcb, reason, op_code, s_hdl, FALSE);
819 attp_send_sr_msg(p_tcb, p_msg);
833 static void gatts_process_find_info(tGATT_TCB *p_tcb, UINT8 op_code, UINT16 len, UINT8 *p_data)
846 buf_len = (UINT16)(sizeof(BT_HDR) + p_tcb->payload_size + L2CAP_MIN_OFFSET);
861 buf_len = p_tcb->payload_size - 2;
891 gatt_send_error_rsp (p_tcb, reason, op_code, s_hdl, FALSE);
894 attp_send_sr_msg(p_tcb, p_msg);
908 static void gatts_process_mtu_req (tGATT_TCB *p_tcb, UINT16 len, UINT8 *p_data)
916 if (p_tcb->att_lcid != L2CAP_ATT_CID)
918 gatt_send_error_rsp (p_tcb, GATT_REQ_NOT_SUPPORTED, GATT_REQ_MTU, 0, FALSE);
923 gatt_send_error_rsp (p_tcb, GATT_INVALID_PDU, GATT_REQ_MTU, 0, FALSE);
930 p_tcb->payload_size = GATT_DEF_BLE_MTU_SIZE;
932 p_tcb->payload_size = GATT_MAX_MTU_SIZE;
934 p_tcb->payload_size = mtu;
936 GATT_TRACE_ERROR("MTU request PDU with MTU size %d", p_tcb->payload_size);
938 l2cble_set_fixed_channel_tx_data_length(p_tcb->peer_bda, L2CAP_ATT_CID, p_tcb->payload_size);
940 if ((p_buf = attp_build_sr_msg(p_tcb, GATT_RSP_MTU, (tGATT_SR_MSG *) &p_tcb->payload_size)) != NULL)
942 attp_send_sr_msg (p_tcb, p_buf);
951 conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, gatt_cb.cl_rcb[i].gatt_if);
953 (tGATTS_DATA *)&p_tcb->payload_size);
976 void gatts_process_read_by_type_req(tGATT_TCB *p_tcb, UINT8 op_code, UINT16 len, UINT8 *p_data)
980 UINT16 msg_len = (UINT16)(sizeof(BT_HDR) + p_tcb->payload_size + L2CAP_MIN_OFFSET),
997 gatt_send_error_rsp (p_tcb, gatt_cb.err_status, gatt_cb.req_op_code, s_hdl, FALSE);
1019 buf_len = p_tcb->payload_size - 2;
1033 gatt_sr_get_sec_info(p_tcb->peer_bda,
1034 p_tcb->transport,
1038 ret = gatts_db_read_attr_value_by_type(p_tcb,
1075 gatt_send_error_rsp (p_tcb, reason, op_code, s_hdl, FALSE);
1078 attp_send_sr_msg(p_tcb, p_msg);
1092 void gatts_process_write_req (tGATT_TCB *p_tcb, UINT8 i_rcb, UINT16 handle,
1131 gatt_sr_get_sec_info(p_tcb->peer_bda,
1132 p_tcb->transport,
1147 if ((trans_id = gatt_sr_enqueue_cmd(p_tcb, op_code, handle)) != 0)
1150 conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_sreg->gatt_if);
1169 gatt_send_error_rsp (p_tcb, status, op_code, handle, FALSE);
1184 static void gatts_process_read_req(tGATT_TCB *p_tcb, tGATT_SR_REG *p_rcb, UINT8 op_code,
1187 UINT16 buf_len = (UINT16)(sizeof(BT_HDR) + p_tcb->payload_size + L2CAP_MIN_OFFSET);
1209 buf_len = p_tcb->payload_size - 1;
1211 gatt_sr_get_sec_info(p_tcb->peer_bda,
1212 p_tcb->transport,
1216 reason = gatts_read_attr_value_by_handle(p_tcb,
1237 gatt_send_error_rsp (p_tcb, reason, op_code, handle, FALSE);
1240 attp_send_sr_msg(p_tcb, p_msg);
1254 void gatts_process_attribute_req (tGATT_TCB *p_tcb, UINT8 op_code,
1280 gatt_send_error_rsp (p_tcb, gatt_cb.err_status, gatt_cb.req_op_code, handle, FALSE);
1302 gatts_process_read_req(p_tcb, p_rcb, op_code, handle, len, p);
1309 gatts_process_write_req(p_tcb, i, handle, op_code, len, p);
1325 gatt_send_error_rsp (p_tcb, status, op_code, handle, FALSE);
1337 static void gatts_proc_srv_chg_ind_ack(tGATT_TCB *p_tcb )
1344 if ((p_buf = gatt_is_bda_in_the_srv_chg_clt_list(p_tcb->peer_bda)) != NULL)
1364 static void gatts_chk_pending_ind(tGATT_TCB *p_tcb )
1366 tGATT_VALUE *p_buf = (tGATT_VALUE *)GKI_getfirst(&p_tcb->pending_ind_q);
1375 GKI_freebuf(GKI_remove_from_queue (&p_tcb->pending_ind_q, p_buf));
1389 static BOOLEAN gatts_proc_ind_ack(tGATT_TCB *p_tcb, UINT16 ack_handle)
1397 gatts_proc_srv_chg_ind_ack(p_tcb);
1402 gatts_chk_pending_ind(p_tcb);
1415 void gatts_process_value_conf(tGATT_TCB *p_tcb, UINT8 op_code)
1417 UINT16 handle = p_tcb->indicate_handle;
1424 btu_stop_timer (&p_tcb->conf_timer_ent);
1427 p_tcb->indicate_handle = 0;
1428 continue_processing = gatts_proc_ind_ack(p_tcb, handle);
1436 trans_id = gatt_sr_enqueue_cmd(p_tcb, op_code, handle);
1437 conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_rcb->gatt_if);
1461 void gatt_server_handle_client_req (tGATT_TCB *p_tcb, UINT8 op_code,
1465 if (!gatt_sr_cmd_empty(p_tcb) && op_code != GATT_HANDLE_VALUE_CONF)
1470 if (len >= p_tcb->payload_size)
1472 GATT_TRACE_ERROR("server receive invalid PDU size:%d pdu size:%d", len + 1, p_tcb->payload_size );
1478 gatt_send_error_rsp (p_tcb, GATT_INVALID_PDU, op_code, 0, FALSE);
1488 gatts_process_primary_service_req (p_tcb, op_code, len, p_data);
1492 gatts_process_find_info(p_tcb, op_code, len, p_data);
1497 gatts_process_read_by_type_req(p_tcb, op_code, len, p_data);
1507 gatts_process_attribute_req (p_tcb, op_code, len, p_data);
1511 gatts_process_value_conf (p_tcb, op_code);
1515 gatts_process_mtu_req (p_tcb, len, p_data);
1519 gatt_process_exec_write_req (p_tcb, op_code, len, p_data);
1523 gatt_process_read_multi_req (p_tcb, op_code, len, p_data);