diff options
-rw-r--r-- | Makefile.tools | 36 | ||||
-rw-r--r-- | monitor/analyze.c | 13 | ||||
-rw-r--r-- | monitor/control.c | 23 |
3 files changed, 41 insertions, 31 deletions
diff --git a/Makefile.tools b/Makefile.tools index 9199222a2..b8df136ef 100644 --- a/Makefile.tools +++ b/Makefile.tools @@ -14,24 +14,24 @@ if MONITOR bin_PROGRAMS += monitor/btmon monitor_btmon_SOURCES = monitor/main.c monitor/bt.h \ - monitor/mainloop.h monitor/mainloop.c \ - monitor/display.h monitor/display.c \ - monitor/hcidump.h monitor/hcidump.c \ - monitor/btsnoop.h monitor/btsnoop.c \ - monitor/ellisys.h monitor/ellisys.c \ - monitor/control.h monitor/control.c \ - monitor/packet.h monitor/packet.c \ - monitor/vendor.h monitor/vendor.c \ - monitor/lmp.h monitor/lmp.c \ - monitor/crc.h monitor/crc.c \ - monitor/ll.h monitor/ll.c \ - monitor/l2cap.h monitor/l2cap.c \ - monitor/sdp.h monitor/sdp.c \ - monitor/uuid.h monitor/uuid.c \ - monitor/hwdb.h monitor/hwdb.c \ - monitor/analyze.h monitor/analyze.c \ - src/shared/util.h src/shared/util.c \ - src/shared/queue.h src/shared/queue.c + monitor/mainloop.h monitor/mainloop.c \ + monitor/display.h monitor/display.c \ + monitor/hcidump.h monitor/hcidump.c \ + monitor/ellisys.h monitor/ellisys.c \ + monitor/control.h monitor/control.c \ + monitor/packet.h monitor/packet.c \ + monitor/vendor.h monitor/vendor.c \ + monitor/lmp.h monitor/lmp.c \ + monitor/crc.h monitor/crc.c \ + monitor/ll.h monitor/ll.c \ + monitor/l2cap.h monitor/l2cap.c \ + monitor/sdp.h monitor/sdp.c \ + monitor/uuid.h monitor/uuid.c \ + monitor/hwdb.h monitor/hwdb.c \ + monitor/analyze.h monitor/analyze.c \ + src/shared/util.h src/shared/util.c \ + src/shared/queue.h src/shared/queue.c \ + src/shared/btsnoop.h src/shared/btsnoop.c monitor_btmon_LDADD = lib/libbluetooth-internal.la @UDEV_LIBS@ endif diff --git a/monitor/analyze.c b/monitor/analyze.c index afb6dee13..2d994e3c1 100644 --- a/monitor/analyze.c +++ b/monitor/analyze.c @@ -31,7 +31,7 @@ #include "src/shared/util.h" #include "src/shared/queue.h" -#include "monitor/btsnoop.h" +#include "src/shared/btsnoop.h" #include "monitor/bt.h" #include "analyze.h" @@ -255,12 +255,16 @@ static void sco_pkt(struct timeval *tv, uint16_t index, void analyze_trace(const char *path) { + struct btsnoop *btsnoop_file; unsigned long num_packets = 0; uint32_t type; - if (btsnoop_open(path, &type) < 0) + btsnoop_file = btsnoop_open(path); + if (!btsnoop_file) return; + type = btsnoop_get_type(btsnoop_file); + switch (type) { case BTSNOOP_TYPE_HCI: case BTSNOOP_TYPE_UART: @@ -282,7 +286,8 @@ void analyze_trace(const char *path) struct timeval tv; uint16_t index, opcode, pktlen; - if (btsnoop_read_hci(&tv, &index, &opcode, buf, &pktlen) < 0) + if (btsnoop_read_hci(btsnoop_file, &tv, &index, &opcode, + buf, &pktlen) < 0) break; switch (opcode) { @@ -316,5 +321,5 @@ void analyze_trace(const char *path) queue_destroy(dev_list, dev_destroy); done: - btsnoop_close(); + btsnoop_unref(btsnoop_file); } diff --git a/monitor/control.c b/monitor/control.c index c132b41b0..bf0ee0220 100644 --- a/monitor/control.c +++ b/monitor/control.c @@ -41,7 +41,7 @@ #include "lib/mgmt.h" #include "src/shared/util.h" -#include "monitor/btsnoop.h" +#include "src/shared/btsnoop.h" #include "mainloop.h" #include "display.h" #include "packet.h" @@ -49,6 +49,7 @@ #include "ellisys.h" #include "control.h" +static struct btsnoop *btsnoop_file = NULL; static bool hcidump_fallback = false; #define MAX_PACKET_SIZE (1486 + 4) @@ -628,7 +629,8 @@ static void data_callback(int fd, uint32_t events, void *user_data) break; case HCI_CHANNEL_MONITOR: packet_monitor(tv, index, opcode, data->buf, pktlen); - btsnoop_write_hci(tv, index, opcode, data->buf, pktlen); + btsnoop_write_hci(btsnoop_file, tv, index, opcode, + data->buf, pktlen); ellisys_inject_hci(tv, index, opcode, data->buf, pktlen); break; @@ -813,7 +815,7 @@ void control_server(const char *path) void control_writer(const char *path) { - btsnoop_create(path, BTSNOOP_TYPE_MONITOR); + btsnoop_file = btsnoop_create(path, BTSNOOP_TYPE_MONITOR); } void control_reader(const char *path) @@ -823,9 +825,12 @@ void control_reader(const char *path) uint32_t type; struct timeval tv; - if (btsnoop_open(path, &type) < 0) + btsnoop_file = btsnoop_open(path); + if (!btsnoop_file) return; + type = btsnoop_get_type(btsnoop_file); + switch (type) { case BTSNOOP_TYPE_HCI: case BTSNOOP_TYPE_UART: @@ -847,8 +852,8 @@ void control_reader(const char *path) while (1) { uint16_t index, opcode; - if (btsnoop_read_hci(&tv, &index, &opcode, - buf, &pktlen) < 0) + if (!btsnoop_read_hci(btsnoop_file, &tv, &index, + &opcode, buf, &pktlen)) break; packet_monitor(&tv, index, opcode, buf, pktlen); @@ -860,8 +865,8 @@ void control_reader(const char *path) while (1) { uint16_t frequency; - if (btsnoop_read_phy(&tv, &frequency, - buf, &pktlen) < 0) + if (!btsnoop_read_phy(btsnoop_file, &tv, &frequency, + buf, &pktlen)) break; packet_simulator(&tv, frequency, buf, pktlen); @@ -871,7 +876,7 @@ void control_reader(const char *path) close_pager(); - btsnoop_close(); + btsnoop_unref(btsnoop_file); } int control_tracing(void) |