diff --git a/monitor/btsnoop.c b/monitor/btsnoop.c
index 147e9ee..04a6dff 100644
--- a/monitor/btsnoop.c
+++ b/monitor/btsnoop.c
btsnoop_type = ntohl(hdr.type);
+ switch (btsnoop_type) {
+ case 1001:
+ case 1002:
+ packet_del_filter(PACKET_FILTER_SHOW_INDEX);
+ break;
+
+ case 2001:
+ packet_add_filter(PACKET_FILTER_SHOW_INDEX);
+ break;
+ }
+
return 0;
}
diff --git a/monitor/control.c b/monitor/control.c
index 49df440..638d173 100644
--- a/monitor/control.c
+++ b/monitor/control.c
int control_tracing(void)
{
+ packet_add_filter(PACKET_FILTER_SHOW_INDEX);
+
if (server_fd >= 0)
return 0;
diff --git a/monitor/main.c b/monitor/main.c
index 7ea7773..9307f52 100644
--- a/monitor/main.c
+++ b/monitor/main.c
mainloop_set_signal(&mask, signal_callback, NULL, NULL);
- filter_mask |= PACKET_FILTER_SHOW_INDEX;
filter_mask |= PACKET_FILTER_SHOW_TIME;
packet_set_filter(filter_mask);
diff --git a/monitor/packet.c b/monitor/packet.c
index f5d1c17..fd9e663 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
filter_mask = filter;
}
+void packet_add_filter(unsigned long filter)
+{
+ filter_mask |= filter;
+}
+
+void packet_del_filter(unsigned long filter)
+{
+ filter_mask &= ~filter;
+}
+
static void print_channel_header(struct timeval *tv, uint16_t index,
uint16_t channel)
{
diff --git a/monitor/packet.h b/monitor/packet.h
index ea21bd7..29fab66 100644
--- a/monitor/packet.h
+++ b/monitor/packet.h
#define PACKET_FILTER_SHOW_SCO_DATA (1 << 4)
void packet_set_filter(unsigned long filter);
+void packet_add_filter(unsigned long filter);
+void packet_del_filter(unsigned long filter);
void packet_hexdump(const unsigned char *buf, uint16_t len);