summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.tools36
-rw-r--r--monitor/analyze.c13
-rw-r--r--monitor/control.c23
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)