#include <stdio.h>
#include <string.h>
+#include "lib/bluetooth.h"
+
#include "src/shared/util.h"
#include "src/shared/queue.h"
#include "src/shared/btsnoop.h"
unsigned long num_evt;
unsigned long num_acl;
unsigned long num_sco;
+ uint16_t manufacturer;
};
static struct queue *dev_list;
}
printf("Found %s controller with index %u\n", str, dev->index);
- printf(" BD_ADDR %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",
+ printf(" BD_ADDR %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
dev->bdaddr[5], dev->bdaddr[4], dev->bdaddr[3],
dev->bdaddr[2], dev->bdaddr[1], dev->bdaddr[0]);
+ if (dev->manufacturer != 0xffff)
+ printf(" (%s)", bt_compidtostr(dev->manufacturer));
+ printf("\n");
+
+
printf(" %lu commands\n", dev->num_cmd);
printf(" %lu events\n", dev->num_evt);
printf(" %lu ACL packets\n", dev->num_acl);
}
dev->index = index;
+ dev->manufacturer = 0xffff;
return dev;
}
dev->num_sco++;
}
+static void info_index(struct timeval *tv, uint16_t index,
+ const void *data, uint16_t size)
+{
+ const struct btsnoop_opcode_index_info *hdr = data;
+ struct hci_dev *dev;
+
+ data += sizeof(*hdr);
+ size -= sizeof(*hdr);
+
+ dev = dev_lookup(index);
+ if (!dev)
+ return;
+
+ dev->manufacturer = hdr->manufacturer;
+}
+
void analyze_trace(const char *path)
{
struct btsnoop *btsnoop_file;
case BTSNOOP_OPCODE_OPEN_INDEX:
case BTSNOOP_OPCODE_CLOSE_INDEX:
break;
+ case BTSNOOP_OPCODE_INDEX_INFO:
+ info_index(&tv, index, buf, pktlen);
+ break;
default:
fprintf(stderr, "Wrong opcode %u\n", opcode);
goto done;