diff --git a/monitor/packet.c b/monitor/packet.c
index 8b1ee9b..c5a6656 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
packet_print_company("Manufacturer", le16_to_cpu(manufacturer));
}
+static const struct {
+ uint16_t ver;
+ const char *str;
+} broadcom_subversion_table[] = {
+ { 0x210b, "BCM43142A0" }, /* 001.001.011 */
+ { 0x2112, "BCM4314A0" }, /* 001.001.018 */
+ { 0x2118, "BCM20702A0" }, /* 001.001.024 */
+ { 0x2126, "BCM4335A0" }, /* 001.001.038 */
+ { 0x220e, "BCM20702A1" }, /* 001.002.014 */
+ { 0x230f, "BCM4354A2" }, /* 001.003.015 */
+ { 0x4106, "BCM4335B0" }, /* 002.001.006 */
+ { 0x410e, "BCM20702B0" }, /* 002.001.014 */
+ { 0x6109, "BCM4335C0" }, /* 003.001.009 */
+ { 0x610c, "BCM4354" }, /* 003.001.012 */
+ { }
+};
+
+static void print_manufacturer_subversion(uint16_t manufacturer,
+ uint16_t subversion)
+{
+ uint16_t ver = le16_to_cpu(subversion);
+ const char *str = NULL;
+ int i;
+
+ switch (le16_to_cpu(manufacturer)) {
+ case 15:
+ for (i = 0; broadcom_subversion_table[i].str; i++) {
+ if (broadcom_subversion_table[i].ver == ver) {
+ str = broadcom_subversion_table[i].str;
+ break;
+ }
+ }
+
+ if (str)
+ print_field(" Firmware: %3.3u.%3.3u.%3.3u (%s)",
+ (ver & 0x7000) >> 13,
+ (ver & 0x1f00) >> 8, ver & 0x00ff, str);
+ else
+ print_field(" Firmware: %3.3u.%3.3u.%3.3u",
+ (ver & 0x7000) >> 13,
+ (ver & 0x1f00) >> 8, ver & 0x00ff);
+ break;
+ }
+}
+
+static void print_manufacturer_revision(uint16_t manufacturer,
+ uint16_t revision)
+{
+ uint16_t rev = le16_to_cpu(revision);
+
+ switch (le16_to_cpu(manufacturer)) {
+ case 15:
+ print_field(" Build: %4.4u", rev & 0x0fff);
+ break;
+ }
+}
+
static const char *get_supported_command(int bit);
static void print_commands(const uint8_t *commands)
}
print_manufacturer(rsp->manufacturer);
+ print_manufacturer_subversion(rsp->manufacturer, rsp->lmp_subver);
+ print_manufacturer_revision(rsp->manufacturer, rsp->hci_rev);
}
static void read_local_commands_rsp(const void *data, uint8_t size)
print_handle(evt->handle);
print_lmp_version(evt->lmp_ver, evt->lmp_subver);
print_manufacturer(evt->manufacturer);
+ print_manufacturer_subversion(evt->manufacturer, evt->lmp_subver);
}
static void qos_setup_complete_evt(const void *data, uint8_t size)