diff --git a/monitor/packet.c b/monitor/packet.c
index ec189ca..e7ea552 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
#define COLOR_WHITE "\x1B[0;37m"
#define COLOR_HIGHLIGHT "\x1B[1;39m"
+#define COLOR_WHITE_BG "\x1B[0;47m"
+
#define COLOR_ERROR "\x1B[1;31m"
+#define COLOR_TIMESTAMP COLOR_YELLOW
+
+#define COLOR_NEW_INDEX COLOR_GREEN
+#define COLOR_DEL_INDEX COLOR_RED
+
+#define COLOR_HCI_COMMAND COLOR_BLUE
+#define COLOR_HCI_COMMAND_UNKNOWN COLOR_WHITE_BG
+
+#define COLOR_HCI_EVENT COLOR_MAGENTA
+#define COLOR_HCI_EVENT_UNKNOWN COLOR_WHITE_BG
+
+#define COLOR_HCI_ACLDATA COLOR_CYAN
+#define COLOR_HCI_SCODATA COLOR_YELLOW
+
static bool use_color(void)
{
static int cached_use_color = -1;
localtime_r(&t, &tm);
if (filter_mask & PACKET_FILTER_SHOW_DATE)
- print_text(COLOR_YELLOW, "%04d-%02d-%02d ",
+ print_text(COLOR_TIMESTAMP, "%04d-%02d-%02d ",
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
if (filter_mask & PACKET_FILTER_SHOW_TIME)
- print_text(COLOR_YELLOW, "%02d:%02d:%02d.%06lu ",
+ print_text(COLOR_TIMESTAMP, "%02d:%02d:%02d.%06lu ",
tm.tm_hour, tm.tm_min, tm.tm_sec, tv->tv_usec);
}
}
static const struct opcode_data opcode_table[] = {
{ 0x0000, "NOP" },
+
/* OGF 1 - Link Control */
{ 0x0401, "Inquiry",
inquiry_cmd, 5, true },
uint16_t ogf = cmd_opcode_ogf(opcode);
uint16_t ocf = cmd_opcode_ocf(opcode);
const struct opcode_data *opcode_data = NULL;
+ const char *opcode_color, *opcode_str;
int i;
for (i = 0; opcode_table[i].str; i++) {
}
}
- print_field("%s (0x%2.2x|0x%4.4x) ncmd %d",
- opcode_data ? opcode_data->str : "Unknown",
- ogf, ocf, evt->ncmd);
+ if (opcode_data) {
+ if (opcode_data->rsp_func)
+ opcode_color = COLOR_HCI_COMMAND;
+ else
+ opcode_color = COLOR_HCI_COMMAND_UNKNOWN;
+ opcode_str = opcode_data->str;
+ } else {
+ opcode_color = COLOR_HCI_COMMAND_UNKNOWN;
+ opcode_str = "Unknown";
+ }
+
+ print_field("%s%s%s (0x%2.2x|0x%4.4x) ncmd %d",
+ use_color() ? opcode_color : "", opcode_str,
+ use_color() ? COLOR_OFF : "", ogf, ocf, evt->ncmd);
if (!opcode_data->rsp_func) {
packet_hexdump(data + 3, size - 3);
uint16_t ogf = cmd_opcode_ogf(opcode);
uint16_t ocf = cmd_opcode_ocf(opcode);
const struct opcode_data *opcode_data = NULL;
+ const char *opcode_color, *opcode_str;
int i;
for (i = 0; opcode_table[i].str; i++) {
}
}
- print_field("%s (0x%2.2x|0x%4.4x) ncmd %d",
- opcode_data ? opcode_data->str : "Unknown",
- ogf, ocf, evt->ncmd);
+ if (opcode_data) {
+ opcode_color = COLOR_HCI_COMMAND;
+ opcode_str = opcode_data->str;
+ } else {
+ opcode_color = COLOR_HCI_COMMAND_UNKNOWN;
+ opcode_str = "Unknown";
+ }
+
+ print_field("%s%s%s (0x%2.2x|0x%4.4x) ncmd %d",
+ use_color() ? opcode_color : "", opcode_str,
+ use_color() ? COLOR_OFF : "", ogf, ocf, evt->ncmd);
print_status(evt->status);
}
{
print_header(tv, index);
- print_text(COLOR_MAGENTA, "= New Index: %s (%s,%s,%s)\n", label,
+ print_text(COLOR_NEW_INDEX, "= New Index: %s (%s,%s,%s)", label,
hci_typetostr(type), hci_bustostr(bus), name);
+ printf("\n");
}
void packet_del_index(struct timeval *tv, uint16_t index, const char *label)
{
print_header(tv, index);
- print_text(COLOR_MAGENTA, "= Delete Index: %s\n", label);
+ print_text(COLOR_DEL_INDEX, "= Delete Index: %s", label);
+ printf("\n");
}
void packet_hci_command(struct timeval *tv, uint16_t index,
uint16_t ogf = cmd_opcode_ogf(opcode);
uint16_t ocf = cmd_opcode_ocf(opcode);
const struct opcode_data *opcode_data = NULL;
+ const char *opcode_color, *opcode_str;
int i;
print_header(tv, index);
}
}
- print_text(COLOR_BLUE, "< HCI Command: %s",
- opcode_data ? opcode_data->str : "Unknown");
+ if (opcode_data) {
+ if (opcode_data->cmd_func)
+ opcode_color = COLOR_HCI_COMMAND;
+ else
+ opcode_color = COLOR_HCI_COMMAND_UNKNOWN;
+ opcode_str = opcode_data->str;
+ } else {
+ opcode_color = COLOR_HCI_COMMAND_UNKNOWN;
+ opcode_str = "Unknown";
+ }
+
+ print_text(opcode_color, "< HCI Command: %s", opcode_str);
print_text(COLOR_OFF, " (0x%2.2x|0x%4.4x) plen %d\n",
ogf, ocf, hdr->plen);
{
const hci_event_hdr *hdr = data;
const struct event_data *event_data = NULL;
+ const char *event_color, *event_str;
int i;
print_header(tv, index);
}
}
- print_text(COLOR_BLUE, "> HCI Event: %s",
- event_data ? event_data->str : "Unknown");
+ if (event_data) {
+ if (event_data->func)
+ event_color = COLOR_HCI_EVENT;
+ else
+ event_color = COLOR_HCI_EVENT_UNKNOWN;
+ event_str = event_data->str;
+ } else {
+ event_color = COLOR_HCI_EVENT_UNKNOWN;
+ event_str = "Unknown";
+ }
+
+ print_text(event_color, "> HCI Event: %s", event_str);
print_text(COLOR_OFF, " (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
if (!event_data || !event_data->func) {
return;
}
- print_text(COLOR_BLUE, "%c ACL Data: handle %d",
+ print_text(COLOR_HCI_ACLDATA, "%c ACL Data: handle %d",
in ? '>' : '<', acl_handle(handle));
print_text(COLOR_OFF, " flags 0x%2.2x dlen %d\n", flags, dlen);
return;
}
- print_text(COLOR_BLUE, "%c SCO Data: handle %d",
+ print_text(COLOR_HCI_SCODATA, "%c SCO Data: handle %d",
in ? '>' : '<', acl_handle(handle));
print_text(COLOR_OFF, " flags 0x%2.2x dlen %d\n", flags, hdr->dlen);