hcidump: Parse Command Complete events corresponding to AMP related HCI commands

This commit is contained in:
Inga Stotland 2010-08-18 16:38:53 -07:00 committed by Marcel Holtmann
parent acd533232a
commit 0c5c007c58

View File

@ -2360,6 +2360,71 @@ static inline void read_clock_dump(int level, struct frame *frm)
}
}
static inline void read_local_amp_info_dump(int level, struct frame *frm)
{
read_local_amp_info_rp *rp = frm->ptr;
p_indent(level, frm);
printf("status 0x%2.2x amp status 0x%2.2x\n",
rp->status, rp->amp_status);
if (rp->status > 0) {
p_indent(level, frm);
printf("Error: %s\n", status2str(rp->status));
} else {
p_indent(level, frm);
printf("total bandwidth %d, max guaranteed bandwidth %d\n",
btohl(rp->total_bandwidth),
btohl(rp->max_guaranteed_bandwidth));
p_indent(level, frm);
printf("min latency %d, max PDU %d, controller type 0x%2.2x\n",
btohl(rp->min_latency), btohl(rp->max_pdu_size),
rp->controller_type);
p_indent(level, frm);
printf("pal caps 0x%4.4x, max assoc len %d\n",
btohs(rp->pal_caps), btohs(rp->max_amp_assoc_length));
p_indent(level, frm);
printf("max flush timeout %d, best effort flush timeout %d\n",
btohl(rp->max_flush_timeout),
btohl(rp->best_effort_flush_timeout));
}
}
static inline void read_local_amp_assoc_dump(int level, struct frame *frm)
{
read_local_amp_assoc_rp *rp = frm->ptr;
uint16_t len = btohs(rp->length);
int i;
p_indent(level, frm);
printf("status 0x%2.2x handle 0x%2.2x length %d\n",
rp->status, rp->handle, len);
if (rp->status > 0) {
p_indent(level, frm);
printf("Error: %s\n", status2str(rp->status));
} else {
for (i = 0; i < len; i++) {
if (!(i % 16)) {
printf("\n");
p_indent(level, frm);
}
printf("%2.2x ", rp->fragment[i]);
}
printf("\n");
}
}
static inline void write_remote_amp_assoc_dump(int level, struct frame *frm)
{
write_remote_amp_assoc_rp *rp = frm->ptr;
p_indent(level, frm);
printf("status 0x%2.2x handle 0x%2.2x\n", rp->status, rp->handle);
if (rp->status > 0) {
p_indent(level, frm);
printf("Error: %s\n", status2str(rp->status));
}
}
static inline void cmd_complete_dump(int level, struct frame *frm)
{
evt_cmd_complete *evt = frm->ptr;
@ -2460,6 +2525,7 @@ static inline void cmd_complete_dump(int level, struct frame *frm)
return;
case OCF_READ_CONN_ACCEPT_TIMEOUT:
case OCF_READ_PAGE_TIMEOUT:
case OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT:
read_page_timeout_dump(level, frm);
return;
case OCF_READ_PAGE_ACTIVITY:
@ -2528,7 +2594,12 @@ static inline void cmd_complete_dump(int level, struct frame *frm)
case OCF_HOST_BUFFER_SIZE:
case OCF_REFRESH_ENCRYPTION_KEY:
case OCF_SEND_KEYPRESS_NOTIFY:
case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
case OCF_SET_EVENT_MASK_PAGE_2:
case OCF_WRITE_LOCATION_DATA:
case OCF_WRITE_FLOW_CONTROL_MODE:
case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
case OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT:
status_response_dump(level, frm);
return;
}
@ -2575,6 +2646,15 @@ static inline void cmd_complete_dump(int level, struct frame *frm)
case OCF_READ_CLOCK:
read_clock_dump(level, frm);
return;
case OCF_READ_LOCAL_AMP_INFO:
read_local_amp_info_dump(level, frm);
return;
case OCF_READ_LOCAL_AMP_ASSOC:
read_local_amp_assoc_dump(level, frm);
return;
case OCF_WRITE_REMOTE_AMP_ASSOC:
write_remote_amp_assoc_dump(level, frm);
return;
}
break;