Home | History | Annotate | Download | only in gatt

Lines Matching defs:p_clcb

48 void gatt_send_prepare_write(tGATT_TCB  *p_tcb, tGATT_CLCB *p_clcb);
80 void gatt_act_discovery(tGATT_CLCB *p_clcb)
82 UINT8 op_code = disc_type_to_att_opcode[p_clcb->op_subtype];
86 if (p_clcb->s_handle <= p_clcb->e_handle && p_clcb->s_handle != 0)
90 cl_req.browse.s_handle = p_clcb->s_handle;
91 cl_req.browse.e_handle = p_clcb->e_handle;
93 if (disc_type_to_uuid[p_clcb->op_subtype] != 0)
96 cl_req.browse.uuid.uu.uuid16 = disc_type_to_uuid[p_clcb->op_subtype];
99 if (p_clcb->op_subtype == GATT_DISC_SRVC_BY_UUID) /* fill in the FindByTypeValue request info*/
102 cl_req.find_type_value.uuid.uu.uuid16 = disc_type_to_uuid[p_clcb->op_subtype];
103 cl_req.find_type_value.s_handle = p_clcb->s_handle;
104 cl_req.find_type_value.e_handle = p_clcb->e_handle;
105 cl_req.find_type_value.value_len = p_clcb->uuid.len;
107 if (p_clcb->uuid.len == LEN_UUID_32)
110 gatt_convert_uuid32_to_uuid128(cl_req.find_type_value.value, p_clcb->uuid.uu.uuid32);
113 memcpy (cl_req.find_type_value.value, &p_clcb->uuid.uu, p_clcb->uuid.len);
116 st = attp_send_cl_msg(p_clcb->p_tcb, p_clcb->clcb_idx, op_code, &cl_req);
120 gatt_end_operation(p_clcb, GATT_ERROR, NULL);
124 gatt_end_operation(p_clcb, GATT_SUCCESS, NULL);
136 void gatt_act_read (tGATT_CLCB *p_clcb, UINT16 offset)
138 tGATT_TCB *p_tcb = p_clcb->p_tcb;
145 switch (p_clcb->op_subtype)
150 msg.browse.s_handle = p_clcb->s_handle;
151 msg.browse.e_handle = p_clcb->e_handle;
152 if (p_clcb->op_subtype == GATT_READ_BY_TYPE)
153 memcpy(&msg.browse.uuid, &p_clcb->uuid, sizeof(tBT_UUID));
163 if (!p_clcb->counter)
166 msg.handle = p_clcb->s_handle;
170 if (!p_clcb->first_read_blob_after_read)
171 p_clcb->first_read_blob_after_read = TRUE;
173 p_clcb->first_read_blob_after_read = FALSE;
176 p_clcb->first_read_blob_after_read);
179 msg.read_blob.handle = p_clcb->s_handle;
181 p_clcb->op_subtype &= ~ 0x80;
186 msg.read_blob.handle = p_clcb->s_handle;
192 memcpy (&msg.read_multi, p_clcb->p_attr_buf, sizeof(tGATT_READ_MULTI));
197 msg.handle = p_clcb->s_handle;
198 p_clcb->op_subtype &= ~ 0x90;
202 GATT_TRACE_ERROR("Unknown read type: %d", p_clcb->op_subtype);
207 rt = attp_send_cl_msg(p_tcb, p_clcb->clcb_idx, op_code, &msg);
211 gatt_end_operation(p_clcb, rt, NULL);
224 void gatt_act_write (tGATT_CLCB *p_clcb, UINT8 sec_act)
226 tGATT_TCB *p_tcb = p_clcb->p_tcb;
228 tGATT_VALUE *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;
232 switch (p_clcb->op_subtype)
235 p_clcb->s_handle = p_attr->handle;
238 p_clcb->clcb_idx,
249 p_clcb->s_handle = p_attr->handle;
252 p_clcb->clcb_idx,
261 gatt_send_prepare_write(p_tcb, p_clcb);
266 gatt_send_prepare_write(p_tcb, p_clcb);
271 GATT_TRACE_ERROR("Unknown write type: %d", p_clcb->op_subtype);
279 || (rt != GATT_CMD_STARTED && p_clcb->op_subtype == GATT_WRITE_NO_RSP))
285 gatt_end_operation(p_clcb, rt, NULL);
297 void gatt_send_queue_write_cancel (tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, tGATT_EXEC_FLAG flag)
303 rt = attp_send_cl_msg(p_tcb, p_clcb->clcb_idx, GATT_REQ_EXEC_WRITE, (tGATT_CL_MSG *)&flag);
307 gatt_end_operation(p_clcb, rt, NULL);
319 BOOLEAN gatt_check_write_long_terminate(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, tGATT_VALUE *p_rsp_value)
321 tGATT_VALUE *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;
330 p_rsp_value->len != p_clcb->counter ||
334 p_clcb->status = GATT_ERROR;
340 p_clcb->status = GATT_SUCCESS;
348 gatt_send_queue_write_cancel (p_tcb, p_clcb, flag);
362 void gatt_send_prepare_write(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb)
364 tGATT_VALUE *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;
367 UINT8 type = p_clcb->op_subtype;
375 p_clcb->s_handle = p_attr->handle;
380 offset += p_clcb->start_offset;
386 p_clcb->clcb_idx,
394 p_clcb->counter = to_send;
398 gatt_end_operation(p_clcb, rt, NULL);
413 void gatt_process_find_type_value_rsp (tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT16 len, UINT8 *p_data)
422 if (p_clcb->operation != GATTC_OPTYPE_DISCOVERY || p_clcb->op_subtype != GATT_DISC_SRVC_BY_UUID)
434 memcpy (&result.value.group_value.service_type, &p_clcb->uuid, sizeof(tBT_UUID));
438 if (p_clcb->p_reg->app_cb.p_disc_res_cb)
439 (*p_clcb->p_reg->app_cb.p_disc_res_cb)(p_clcb->conn_id, p_clcb->op_subtype, &result);
443 p_clcb->s_handle = (result.value.group_value.e_handle == 0) ? 0 : (result.value.group_value.e_handle + 1);
445 gatt_act_discovery(p_clcb) ;
458 void gatt_process_read_info_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
470 gatt_end_operation(p_clcb, GATT_INVALID_PDU, NULL);
474 if (p_clcb->operation != GATTC_OPTYPE_DISCOVERY || p_clcb->op_subtype != GATT_DISC_CHAR_DSCPT)
495 memcpy (&result.type, &p_clcb->uuid, sizeof(tBT_UUID));
499 if (p_clcb->p_reg->app_cb.p_disc_res_cb)
500 (*p_clcb->p_reg->app_cb.p_disc_res_cb)(p_clcb->conn_id, p_clcb->op_subtype, &result);
503 p_clcb->s_handle = (result.handle == 0) ? 0 :(result.handle + 1);
505 gatt_act_discovery(p_clcb) ;
517 void gatt_proc_disc_error_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 opcode,
544 gatt_end_operation(p_clcb, status, NULL);
557 void gatt_process_error_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
562 tGATT_VALUE *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;
572 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY)
574 gatt_proc_disc_error_rsp(p_tcb, p_clcb, opcode, handle, reason);
578 if ( (p_clcb->operation == GATTC_OPTYPE_WRITE) &&
579 (p_clcb->op_subtype == GATT_WRITE) &&
584 p_clcb->status = reason;
585 gatt_send_queue_write_cancel(p_tcb, p_clcb, GATT_PREP_WRITE_CANCEL);
587 else if ((p_clcb->operation == GATTC_OPTYPE_READ) &&
588 ((p_clcb->op_subtype == GATT_READ_CHAR_VALUE_HDL) ||
589 (p_clcb->op_subtype == GATT_READ_BY_HANDLE)) &&
591 p_clcb->first_read_blob_after_read &&
594 gatt_end_operation(p_clcb, GATT_SUCCESS, (void *)p_clcb->p_attr_buf);
597 gatt_end_operation(p_clcb, reason, NULL);
610 void gatt_process_prep_write_rsp (tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
621 gatt_end_operation(p_clcb, GATT_INVALID_PDU, &value);
632 if (p_clcb->op_subtype == GATT_WRITE_PREPARE)
634 p_clcb->status = GATT_SUCCESS;
638 gatt_end_operation(p_clcb, p_clcb->status, &value);
640 else if (p_clcb->op_subtype == GATT_WRITE )
642 if (!gatt_check_write_long_terminate(p_tcb, p_clcb, &value))
643 gatt_send_prepare_write(p_tcb, p_clcb);
744 void gatt_process_read_by_type_rsp (tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
753 if (((!p_clcb->p_reg) || (!p_clcb->p_reg->app_cb.p_disc_res_cb)) && (p_clcb->operation == GATTC_OPTYPE_DISCOVERY))
759 gatt_end_operation(p_clcb, GATT_INVALID_PDU, NULL);
771 gatt_end_operation(p_clcb, GATT_ERROR, NULL);
787 gatt_end_operation(p_clcb, GATT_INVALID_HANDLE, NULL);
796 result.type.uu.uuid16 = disc_type_to_uuid[p_clcb->op_subtype];
799 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY &&
800 p_clcb->op_subtype == GATT_DISC_SRVC_ALL &&
807 gatt_end_operation(p_clcb, GATT_INVALID_HANDLE, NULL);
821 else if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY && p_clcb->op_subtype == GATT_DISC_INC_SRVC)
829 gatt_end_operation(p_clcb, GATT_INVALID_HANDLE, NULL);
840 p_clcb->s_handle = record_value.incl_service.s_handle;
841 p_clcb->read_uuid128.wait_for_read_rsp = TRUE;
842 p_clcb->read_uuid128.next_disc_start_hdl = handle + 1;
843 memcpy(&p_clcb->read_uuid128.result, &result, sizeof(result));
844 memcpy(&p_clcb->read_uuid128.result.value, &record_value, sizeof (result.value));
845 p_clcb->op_subtype |= 0x90;
846 gatt_act_read(p_clcb, 0);
852 gatt_end_operation(p_clcb, GATT_INVALID_PDU, (void *)p);
857 else if (p_clcb->operation == GATTC_OPTYPE_READ && p_clcb->op_subtype == GATT_READ_BY_TYPE)
859 p_clcb->counter = len - 2;
860 p_clcb->s_handle = handle;
861 if ( p_clcb->counter == (p_clcb->p_tcb->payload_size -4))
863 p_clcb->op_subtype = GATT_READ_BY_HANDLE;
864 if (!p_clcb->p_attr_buf)
865 p_clcb->p_attr_buf = (UINT8 *)GKI_getbuf(GATT_MAX_ATTR_LEN);
866 if (p_clcb->p_attr_buf && p_clcb->counter <= GATT_MAX_ATTR_LEN)
868 memcpy(p_clcb->p_attr_buf, p, p_clcb->counter);
869 gatt_act_read(p_clcb, p_clcb->counter);
872 gatt_end_operation(p_clcb, GATT_INTERNAL_ERROR, (void *)p);
876 gatt_end_operation(p_clcb, GATT_SUCCESS, (void *)p);
886 gatt_end_operation(p_clcb, GATT_INVALID_HANDLE, NULL);
891 gatt_end_operation(p_clcb, GATT_SUCCESS, NULL);
897 if (!gatt_uuid_compare(record_value.dclr_value.char_uuid, p_clcb->uuid))
902 else if (p_clcb->operation == GATTC_OPTYPE_READ)
907 p_clcb->s_handle = record_value.dclr_value.val_handle;
908 p_clcb->op_subtype |= 0x80;
909 gatt_act_read(p_clcb, 0);
919 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY && p_clcb->p_reg->app_cb.p_disc_res_cb)
920 (*p_clcb->p_reg->app_cb.p_disc_res_cb)(p_clcb->conn_id, p_clcb->op_subtype, &result);
923 p_clcb->s_handle = (handle == 0) ? 0 : (handle + 1);
925 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY)
928 gatt_act_discovery(p_clcb) ;
932 gatt_act_read(p_clcb, 0);
946 void gatt_process_read_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
949 UINT16 offset = p_clcb->counter;
954 if (p_clcb->operation == GATTC_OPTYPE_READ)
956 if (p_clcb->op_subtype != GATT_READ_BY_HANDLE)
958 p_clcb->counter = len;
959 gatt_end_operation(p_clcb, GATT_SUCCESS, (void *)p);
965 if (!p_clcb->p_attr_buf)
966 p_clcb->p_attr_buf = (UINT8 *)GKI_getbuf(GATT_MAX_ATTR_LEN);
969 if (p_clcb->p_attr_buf && offset < GATT_MAX_ATTR_LEN)
974 p_clcb->counter += len;
976 memcpy(p_clcb->p_attr_buf + offset, p, len);
984 offset, len, p_clcb->counter);
985 gatt_act_read(p_clcb, p_clcb->counter);
989 gatt_end_operation(p_clcb, GATT_SUCCESS, (void *)p_clcb->p_attr_buf);
994 GATT_TRACE_ERROR("attr offset = %d p_attr_buf = %d ", offset, p_clcb->p_attr_buf);
995 gatt_end_operation(p_clcb, GATT_NO_RESOURCES, (void *)p_clcb->p_attr_buf);
1001 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY &&
1002 p_clcb->op_subtype == GATT_DISC_INC_SRVC &&
1003 p_clcb->read_uuid128.wait_for_read_rsp )
1005 p_clcb->s_handle = p_clcb->read_uuid128.next_disc_start_hdl;
1006 p_clcb->read_uuid128.wait_for_read_rsp = FALSE;
1010 memcpy(p_clcb->read_uuid128.result.value.incl_service.service_type.uu.uuid128, p, len);
1011 p_clcb->read_uuid128.result.value.incl_service.service_type.len = LEN_UUID_128;
1012 if ( p_clcb->p_reg->app_cb.p_disc_res_cb)
1013 (*p_clcb->p_reg->app_cb.p_disc_res_cb)(p_clcb->conn_id, p_clcb->op_subtype, &p_clcb->read_uuid128.result);
1014 gatt_act_discovery(p_clcb) ;
1018 gatt_end_operation(p_clcb, GATT_INVALID_PDU, (void *)p);
1036 void gatt_process_handle_rsp(tGATT_CLCB *p_clcb)
1038 gatt_end_operation(p_clcb, GATT_SUCCESS, NULL);
1050 void gatt_process_mtu_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT16 len, UINT8 *p_data)
1068 gatt_end_operation(p_clcb, status, NULL);
1104 tGATT_CLCB *p_clcb = NULL;
1126 p_clcb = gatt_cmd_dequeue(p_tcb, &rsp_code);
1134 gatt_end_operation(p_clcb, att_ret, NULL);
1164 tGATT_CLCB *p_clcb = NULL;
1169 p_clcb = gatt_cmd_dequeue(p_tcb, &rsp_code);
1173 if (p_clcb == NULL || (rsp_code != op_code && op_code != GATT_RSP_ERROR))
1182 btu_stop_timer (&p_clcb->rsp_timer_ent);
1183 p_clcb->retry_count = 0;
1193 gatt_end_operation(p_clcb, GATT_ERROR, NULL);
1200 gatt_process_error_rsp(p_tcb, p_clcb, op_code, len, p_data);
1204 gatt_process_mtu_rsp(p_tcb, p_clcb, len ,p_data);
1208 gatt_process_read_info_rsp(p_tcb, p_clcb, op_code, len, p_data);
1213 gatt_process_read_by_type_rsp(p_tcb, p_clcb, op_code, len, p_data);
1219 gatt_process_read_rsp(p_tcb, p_clcb, op_code, len, p_data);
1223 gatt_process_find_type_value_rsp(p_tcb, p_clcb, len, p_data);
1227 gatt_process_handle_rsp(p_clcb);
1231 gatt_process_prep_write_rsp(p_tcb, p_clcb, op_code, len, p_data);
1235 gatt_end_operation(p_clcb, p_clcb->status, NULL);