From d3fcb0bb96b3bc33801f1c573974a38a57395b12 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 19 Apr 2005 12:08:47 +0000 Subject: [PATCH] hcidump: Decode link quality, RSSI, AFH map and clock commands --- tools/parser/hci.c | 97 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/tools/parser/hci.c b/tools/parser/hci.c index eceb4a59e..63002728a 100644 --- a/tools/parser/hci.c +++ b/tools/parser/hci.c @@ -754,6 +754,16 @@ static inline void request_local_ext_features_dump(int level, struct frame *frm) printf("page %d\n", cp->page_num); } +static inline void request_clock_dump(int level, struct frame *frm) +{ + read_clock_cp *cp = frm->ptr; + + p_indent(level, frm); + printf("handle %d which %d (%s)\n", + btohs(cp->handle), cp->which_clock, + cp->which_clock ? "piconet" : "local"); +} + static inline void command_dump(int level, struct frame *frm) { hci_command_hdr *hdr = frm->ptr; @@ -902,6 +912,19 @@ static inline void command_dump(int level, struct frame *frm) return; } break; + + case OGF_STATUS_PARAM: + switch (ocf) { + case OCF_READ_LINK_QUALITY: + case OCF_READ_RSSI: + case OCF_READ_AFH_MAP: + generic_command_dump(level + 1, frm); + return; + case OCF_READ_CLOCK: + request_clock_dump(level + 1, frm); + return; + } + break; } raw_dump(level, frm); @@ -1210,6 +1233,70 @@ static inline void read_buffer_size_dump(int level, struct frame *frm) } } +static inline void read_link_quality_dump(int level, struct frame *frm) +{ + read_link_quality_rp *rp = frm->ptr; + + p_indent(level, frm); + printf("status 0x%2.2x handle %d lq %d\n", + rp->status, btohs(rp->handle), rp->link_quality); + + if (rp->status > 0) { + p_indent(level, frm); + printf("Error: %s\n", status2str(rp->status)); + } +} + +static inline void read_rssi_dump(int level, struct frame *frm) +{ + read_rssi_rp *rp = frm->ptr; + + p_indent(level, frm); + printf("status 0x%2.2x handle %d rssi %d\n", + rp->status, btohs(rp->handle), rp->rssi); + + if (rp->status > 0) { + p_indent(level, frm); + printf("Error: %s\n", status2str(rp->status)); + } +} + +static inline void read_afh_map_dump(int level, struct frame *frm) +{ + read_afh_map_rp *rp = frm->ptr; + int i; + + p_indent(level, frm); + printf("status 0x%2.2x handle %d mode %d\n", + rp->status, btohs(rp->handle), rp->mode); + + if (rp->status > 0) { + p_indent(level, frm); + printf("Error: %s\n", status2str(rp->status)); + } else { + p_indent(level, frm); + printf("AFH map: 0x"); + for (i = 0; i < 10; i++) + printf("%2.2x", rp->map[i]); + printf("\n"); + } +} + +static inline void read_clock_dump(int level, struct frame *frm) +{ + read_clock_rp *rp = frm->ptr; + + p_indent(level, frm); + printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n", + rp->status, btohs(rp->handle), + btohl(rp->clock), btohs(rp->accuracy)); + + 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; @@ -1327,11 +1414,19 @@ static inline void cmd_complete_dump(int level, struct frame *frm) switch (ocf) { case OCF_READ_FAILED_CONTACT_COUNTER: case OCF_RESET_FAILED_CONTACT_COUNTER: + status_response_dump(level, frm); + return; case OCF_READ_LINK_QUALITY: + read_link_quality_dump(level, frm); + return; case OCF_READ_RSSI: + read_rssi_dump(level, frm); + return; case OCF_READ_AFH_MAP: + read_afh_map_dump(level, frm); + return; case OCF_READ_CLOCK: - status_response_dump(level, frm); + read_clock_dump(level, frm); return; } break; -- 2.47.3