Home | History | Annotate | Download | only in gatt

Lines Matching refs:p_clcb

40 void gatt_send_prepare_write(tGATT_TCB  *p_tcb, tGATT_CLCB *p_clcb);
72 void gatt_act_discovery(tGATT_CLCB *p_clcb)
74 UINT8 op_code = disc_type_to_att_opcode[p_clcb->op_subtype];
77 if (p_clcb->s_handle <= p_clcb->e_handle && p_clcb->s_handle != 0)
81 cl_req.browse.s_handle = p_clcb->s_handle;
82 cl_req.browse.e_handle = p_clcb->e_handle;
84 if (disc_type_to_uuid[p_clcb->op_subtype] != 0)
87 cl_req.browse.uuid.uu.uuid16 = disc_type_to_uuid[p_clcb->op_subtype];
90 if (p_clcb->op_subtype == GATT_DISC_SRVC_BY_UUID) /* fill in the FindByTypeValue request info*/
93 cl_req.find_type_value.uuid.uu.uuid16 = disc_type_to_uuid[p_clcb->op_subtype];
94 cl_req.find_type_value.s_handle = p_clcb->s_handle;
95 cl_req.find_type_value.e_handle = p_clcb->e_handle;
96 cl_req.find_type_value.value_len = p_clcb->uuid.len;
97 memcpy (cl_req.find_type_value.value, &p_clcb->uuid.uu, p_clcb->uuid.len);
100 if (attp_send_cl_msg(p_clcb->p_tcb, p_clcb->clcb_idx, op_code, &cl_req) != GATT_SUCCESS)
102 gatt_end_operation(p_clcb, GATT_ERROR, NULL);
106 gatt_end_operation(p_clcb, GATT_SUCCESS, NULL);
118 void gatt_act_read (tGATT_CLCB *p_clcb, UINT16 offset)
120 tGATT_TCB *p_tcb = p_clcb->p_tcb;
127 switch (p_clcb->op_subtype)
132 msg.browse.s_handle = p_clcb->s_handle;
133 msg.browse.e_handle = p_clcb->e_handle;
134 if (p_clcb->op_subtype == GATT_READ_BY_TYPE)
135 memcpy(&msg.browse.uuid, &p_clcb->uuid, sizeof(tBT_UUID));
145 if (!p_clcb->counter)
148 msg.handle = p_clcb->s_handle;
152 if (!p_clcb->first_read_blob_after_read)
153 p_clcb->first_read_blob_after_read = TRUE;
155 p_clcb->first_read_blob_after_read = FALSE;
158 p_clcb->first_read_blob_after_read);
161 msg.read_blob.handle = p_clcb->s_handle;
163 p_clcb->op_subtype &= ~ 0x80;
168 msg.read_blob.handle = p_clcb->s_handle;
174 memcpy (&msg.read_multi, p_clcb->p_attr_buf, sizeof(tGATT_READ_MULTI));
179 msg.handle = p_clcb->s_handle;
180 p_clcb->op_subtype &= ~ 0x90;
184 GATT_TRACE_ERROR1("Unknown read type: %d", p_clcb->op_subtype);
189 (rt = attp_send_cl_msg(p_tcb, p_clcb->clcb_idx, op_code, &msg)) != GATT_SUCCESS)
191 gatt_end_operation(p_clcb, rt, NULL);
204 void gatt_act_write (tGATT_CLCB *p_clcb, UINT8 sec_act)
206 tGATT_TCB *p_tcb = p_clcb->p_tcb;
208 tGATT_VALUE *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;
212 switch (p_clcb->op_subtype)
215 p_clcb->s_handle = p_attr->handle;
218 p_clcb->clcb_idx,
229 p_clcb->s_handle = p_attr->handle;
232 p_clcb->clcb_idx,
241 gatt_send_prepare_write(p_tcb, p_clcb);
246 gatt_send_prepare_write(p_tcb, p_clcb);
251 GATT_TRACE_ERROR1("Unknown write type: %d", p_clcb->op_subtype);
259 || (rt != GATT_CMD_STARTED && p_clcb->op_subtype == GATT_WRITE_NO_RSP))
265 gatt_end_operation(p_clcb, rt, NULL);
277 void gatt_send_queue_write_cancel (tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, tGATT_EXEC_FLAG flag)
283 rt = attp_send_cl_msg(p_tcb, p_clcb->clcb_idx, GATT_REQ_EXEC_WRITE, (tGATT_CL_MSG *)&flag);
287 gatt_end_operation(p_clcb, rt, NULL);
299 BOOLEAN gatt_check_write_long_terminate(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, tGATT_VALUE *p_rsp_value)
301 tGATT_VALUE *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;
310 p_rsp_value->len != p_clcb->counter ||
314 p_clcb->status = GATT_ERROR;
320 p_clcb->status = GATT_SUCCESS;
328 gatt_send_queue_write_cancel (p_tcb, p_clcb, flag);
342 void gatt_send_prepare_write(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb)
344 tGATT_VALUE *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;
347 UINT8 type = p_clcb->op_subtype;
355 p_clcb->s_handle = p_attr->handle;
360 offset += p_clcb->start_offset;
366 p_clcb->clcb_idx,
374 p_clcb->counter = to_send;
378 gatt_end_operation(p_clcb, rt, NULL);
393 void gatt_process_find_type_value_rsp (tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT16 len, UINT8 *p_data)
400 if (p_clcb->operation != GATTC_OPTYPE_DISCOVERY || p_clcb->op_subtype != GATT_DISC_SRVC_BY_UUID)
412 memcpy (&result.value.group_value.service_type, &p_clcb->uuid, sizeof(tBT_UUID));
416 if (p_clcb->p_reg->app_cb.p_disc_res_cb)
417 (*p_clcb->p_reg->app_cb.p_disc_res_cb)(p_clcb->conn_id, p_clcb->op_subtype, &result);
421 p_clcb->s_handle = (result.value.group_value.e_handle == 0) ? 0 : (result.value.group_value.e_handle + 1);
423 gatt_act_discovery(p_clcb) ;
436 void gatt_process_read_info_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
443 if (p_clcb->operation != GATTC_OPTYPE_DISCOVERY || p_clcb->op_subtype != GATT_DISC_CHAR_DSCPT)
464 memcpy (&result.type, &p_clcb->uuid, sizeof(tBT_UUID));
468 if (p_clcb->p_reg->app_cb.p_disc_res_cb)
469 (*p_clcb->p_reg->app_cb.p_disc_res_cb)(p_clcb->conn_id, p_clcb->op_subtype, &result);
472 p_clcb->s_handle = (result.handle == 0) ? 0 :(result.handle + 1);
474 gatt_act_discovery(p_clcb) ;
486 void gatt_proc_disc_error_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 opcode,
510 gatt_end_operation(p_clcb, status, NULL);
523 void gatt_process_error_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
528 tGATT_VALUE *p_attr = (tGATT_VALUE *)p_clcb->p_attr_buf;
535 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY)
537 gatt_proc_disc_error_rsp(p_tcb, p_clcb, opcode, handle, reason);
541 if ( (p_clcb->operation == GATTC_OPTYPE_WRITE) &&
542 (p_clcb->op_subtype == GATT_WRITE) &&
547 p_clcb->status = reason;
548 gatt_send_queue_write_cancel(p_tcb, p_clcb, GATT_PREP_WRITE_CANCEL);
550 else if ((p_clcb->operation == GATTC_OPTYPE_READ) &&
551 ((p_clcb->op_subtype == GATT_READ_CHAR_VALUE_HDL) ||
552 (p_clcb->op_subtype == GATT_READ_BY_HANDLE)) &&
554 p_clcb->first_read_blob_after_read &&
557 gatt_end_operation(p_clcb, GATT_SUCCESS, (void *)p_clcb->p_attr_buf);
560 gatt_end_operation(p_clcb, reason, NULL);
573 void gatt_process_prep_write_rsp (tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
588 if (p_clcb->op_subtype == GATT_WRITE_PREPARE)
590 p_clcb->status = GATT_SUCCESS;
594 gatt_end_operation(p_clcb, p_clcb->status, &value);
596 else if (p_clcb->op_subtype == GATT_WRITE )
598 if (!gatt_check_write_long_terminate(p_tcb, p_clcb, &value))
599 gatt_send_prepare_write(p_tcb, p_clcb);
694 void gatt_process_read_by_type_rsp (tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
703 if (((!p_clcb->p_reg) || (!p_clcb->p_reg->app_cb.p_disc_res_cb)) && (p_clcb->operation == GATTC_OPTYPE_DISCOVERY))
714 gatt_end_operation(p_clcb, GATT_ERROR, NULL);
730 gatt_end_operation(p_clcb, GATT_INVALID_HANDLE, NULL);
739 result.type.uu.uuid16 = disc_type_to_uuid[p_clcb->op_subtype];
742 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY &&
743 p_clcb->op_subtype == GATT_DISC_SRVC_ALL &&
750 gatt_end_operation(p_clcb, GATT_INVALID_HANDLE, NULL);
764 else if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY && p_clcb->op_subtype == GATT_DISC_INC_SRVC)
772 gatt_end_operation(p_clcb, GATT_INVALID_HANDLE, NULL);
783 p_clcb->s_handle = record_value.incl_service.s_handle;
784 p_clcb->read_uuid128.wait_for_read_rsp = TRUE;
785 p_clcb->read_uuid128.next_disc_start_hdl = handle + 1;
786 memcpy(&p_clcb->read_uuid128.result, &result, sizeof(result));
787 memcpy(&p_clcb->read_uuid128.result.value, &record_value, sizeof (result.value));
788 p_clcb->op_subtype |= 0x90;
789 gatt_act_read(p_clcb, 0);
795 gatt_end_operation(p_clcb, GATT_INVALID_PDU, (void *)p);
800 else if (p_clcb->operation == GATTC_OPTYPE_READ && p_clcb->op_subtype == GATT_READ_BY_TYPE)
802 p_clcb->counter = len - 2;
803 p_clcb->s_handle = handle;
804 if ( p_clcb->counter == (p_clcb->p_tcb->payload_size -4))
806 p_clcb->op_subtype = GATT_READ_BY_HANDLE;
807 if (!p_clcb->p_attr_buf)
808 p_clcb->p_attr_buf = (UINT8 *)GKI_getbuf(GATT_MAX_ATTR_LEN);
809 if (p_clcb->p_attr_buf && p_clcb->counter <= GATT_MAX_ATTR_LEN)
811 memcpy(p_clcb->p_attr_buf, p, p_clcb->counter);
812 gatt_act_read(p_clcb, p_clcb->counter);
815 gatt_end_operation(p_clcb, GATT_INTERNAL_ERROR, (void *)p);
819 gatt_end_operation(p_clcb, GATT_SUCCESS, (void *)p);
829 gatt_end_operation(p_clcb, GATT_INVALID_HANDLE, NULL);
834 gatt_end_operation(p_clcb, GATT_SUCCESS, NULL);
840 if (!gatt_uuid_compare(record_value.dclr_value.char_uuid, p_clcb->uuid))
845 else if (p_clcb->operation == GATTC_OPTYPE_READ)
850 p_clcb->s_handle = record_value.dclr_value.val_handle;
851 p_clcb->op_subtype |= 0x80;
852 gatt_act_read(p_clcb, 0);
862 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY && p_clcb->p_reg->app_cb.p_disc_res_cb)
863 (*p_clcb->p_reg->app_cb.p_disc_res_cb)(p_clcb->conn_id, p_clcb->op_subtype, &result);
866 p_clcb->s_handle = (handle == 0) ? 0 : (handle + 1);
868 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY)
871 gatt_act_discovery(p_clcb) ;
875 gatt_act_read(p_clcb, 0);
889 void gatt_process_read_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code,
892 UINT16 offset = p_clcb->counter;
895 if (p_clcb->operation == GATTC_OPTYPE_READ)
897 if (p_clcb->op_subtype != GATT_READ_BY_HANDLE)
899 p_clcb->counter = len;
900 gatt_end_operation(p_clcb, GATT_SUCCESS, (void *)p);
906 if (!p_clcb->p_attr_buf)
907 p_clcb->p_attr_buf = (UINT8 *)GKI_getbuf(GATT_MAX_ATTR_LEN);
910 if (p_clcb->p_attr_buf && offset < GATT_MAX_ATTR_LEN)
915 p_clcb->counter += len;
917 memcpy(p_clcb->p_attr_buf + offset, p, len);
925 p_clcb->counter);
926 gatt_act_read(p_clcb, p_clcb->counter);
930 gatt_end_operation(p_clcb, GATT_SUCCESS, (void *)p_clcb->p_attr_buf);
935 GATT_TRACE_ERROR2("attr offset = %d p_attr_buf = %d ", offset, p_clcb->p_attr_buf);
936 gatt_end_operation(p_clcb, GATT_NO_RESOURCES, (void *)p_clcb->p_attr_buf);
942 if (p_clcb->operation == GATTC_OPTYPE_DISCOVERY &&
943 p_clcb->op_subtype == GATT_DISC_INC_SRVC &&
944 p_clcb->read_uuid128.wait_for_read_rsp )
946 p_clcb->s_handle = p_clcb->read_uuid128.next_disc_start_hdl;
947 p_clcb->read_uuid128.wait_for_read_rsp = FALSE;
951 memcpy(p_clcb->read_uuid128.result.value.incl_service.service_type.uu.uuid128, p, len);
952 p_clcb->read_uuid128.result.value.incl_service.service_type.len = LEN_UUID_128;
953 if ( p_clcb->p_reg->app_cb.p_disc_res_cb)
954 (*p_clcb->p_reg->app_cb.p_disc_res_cb)(p_clcb->conn_id, p_clcb->op_subtype, &p_clcb->read_uuid128.result);
955 gatt_act_discovery(p_clcb) ;
959 gatt_end_operation(p_clcb, GATT_INVALID_PDU, (void *)p);
977 void gatt_process_handle_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT8 op_code, UINT16 len, UINT8 *p_data)
986 gatt_end_operation(p_clcb, GATT_SUCCESS, NULL);
998 void gatt_process_mtu_rsp(tGATT_TCB *p_tcb, tGATT_CLCB *p_clcb, UINT16 len, UINT8 *p_data)
1007 gatt_end_operation(p_clcb, p_clcb->status, NULL);
1043 tGATT_CLCB *p_clcb = NULL;
1063 p_clcb = gatt_cmd_dequeue(p_tcb, &rsp_code);
1069 gatt_end_operation(p_clcb, GATT_SUCCESS, NULL);
1099 tGATT_CLCB *p_clcb = NULL;
1104 p_clcb = gatt_cmd_dequeue(p_tcb, &rsp_code);
1108 if (p_clcb == NULL || (rsp_code != op_code && op_code != GATT_RSP_ERROR))
1125 gatt_end_operation(p_clcb, GATT_ERROR, NULL);
1132 gatt_process_error_rsp(p_tcb, p_clcb, op_code, len, p_data);
1136 gatt_process_mtu_rsp(p_tcb, p_clcb, len ,p_data);
1140 gatt_process_read_info_rsp(p_tcb, p_clcb, op_code, len, p_data);
1145 gatt_process_read_by_type_rsp(p_tcb, p_clcb, op_code, len, p_data);
1151 gatt_process_read_rsp(p_tcb, p_clcb, op_code, len, p_data);
1155 gatt_process_find_type_value_rsp(p_tcb, p_clcb, len, p_data);
1159 gatt_process_handle_rsp(p_tcb, p_clcb, op_code, len, p_data);
1163 gatt_process_prep_write_rsp(p_tcb, p_clcb, op_code, len, p_data);
1167 gatt_end_operation(p_clcb, p_clcb->status, NULL);