monitor: Cache connection information
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 18 May 2022 01:22:01 +0000 (18:22 -0700)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 15 May 2023 09:25:54 +0000 (14:55 +0530)
This caches connection information including the device addres so it can
be printed alongside the handle:

> HCI Event: Disconnect Complete (0x05) plen 4
        Status: Success (0x00)
        Handle: 3585 Address: 68:79:12:XX:XX:XX (OUI 68-79-12)
        Reason: Connection Terminated By Local Host (0x16)

Signed-off-by: Manika Shrivastava <manika.sh@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
monitor/broadcom.c
monitor/intel.c
monitor/msft.c
monitor/packet.c
monitor/packet.h
monitor/vendor.h

index ed27fa1..aaae6f9 100644 (file)
@@ -223,23 +223,28 @@ static void print_clock_setting(uint8_t clock)
        print_field("UART clock: %s (0x%2.2x)", str, clock);
 }
 
-static void null_cmd(const void *data, uint8_t size)
+static void null_cmd(uint16_t index, const void *data, uint8_t size)
 {
 }
 
-static void status_rsp(const void *data, uint8_t size)
+static void null_cmd_without_index(const void *data, uint8_t size)
+{
+}
+
+static void status_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
 
        print_status(status);
 }
 
-static void write_bd_addr_cmd(const void *data, uint8_t size)
+static void write_bd_addr_cmd(uint16_t index, const void *data, uint8_t size)
 {
        packet_print_addr("Address", data, 0x00);
 }
 
-static void update_uart_baud_rate_cmd(const void *data, uint8_t size)
+static void update_uart_baud_rate_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint16_t enc_rate = get_le16(data);
        uint32_t exp_rate = get_le32(data + 2);
@@ -252,7 +257,8 @@ static void update_uart_baud_rate_cmd(const void *data, uint8_t size)
        print_field("Explicit baud rate: %u Mbps", exp_rate);
 }
 
-static void write_sco_pcm_int_param_cmd(const void *data, uint8_t size)
+static void write_sco_pcm_int_param_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t routing = get_u8(data);
        uint8_t rate = get_u8(data + 1);
@@ -267,7 +273,8 @@ static void write_sco_pcm_int_param_cmd(const void *data, uint8_t size)
        print_clock_mode(clock_mode);
 }
 
-static void read_sco_pcm_int_param_rsp(const void *data, uint8_t size)
+static void read_sco_pcm_int_param_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t routing = get_u8(data + 1);
@@ -284,7 +291,8 @@ static void read_sco_pcm_int_param_rsp(const void *data, uint8_t size)
        print_clock_mode(clock_mode);
 }
 
-static void set_sleepmode_param_cmd(const void *data, uint8_t size)
+static void set_sleepmode_param_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t mode = get_u8(data);
 
@@ -293,7 +301,8 @@ static void set_sleepmode_param_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 1, size - 1);
 }
 
-static void read_sleepmode_param_rsp(const void *data, uint8_t size)
+static void read_sleepmode_param_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t mode = get_u8(data + 1);
@@ -304,7 +313,8 @@ static void read_sleepmode_param_rsp(const void *data, uint8_t size)
        packet_hexdump(data + 2, size - 2);
 }
 
-static void enable_radio_cmd(const void *data, uint8_t size)
+static void enable_radio_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t mode = get_u8(data);
        const char *str;
@@ -324,7 +334,8 @@ static void enable_radio_cmd(const void *data, uint8_t size)
        print_field("Mode: %s (0x%2.2x)", str, mode);
 }
 
-static void enable_usb_hid_emulation_cmd(const void *data, uint8_t size)
+static void enable_usb_hid_emulation_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t enable = get_u8(data);
        const char *str;
@@ -344,7 +355,8 @@ static void enable_usb_hid_emulation_cmd(const void *data, uint8_t size)
        print_field("Enable: %s (0x%2.2x)", str, enable);
 }
 
-static void read_uart_clock_setting_rsp(const void *data, uint8_t size)
+static void read_uart_clock_setting_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t clock = get_u8(data + 1);
@@ -353,21 +365,22 @@ static void read_uart_clock_setting_rsp(const void *data, uint8_t size)
        print_clock_setting(clock);
 }
 
-static void write_uart_clock_setting_cmd(const void *data, uint8_t size)
+static void write_uart_clock_setting_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t clock = get_u8(data);
 
        print_clock_setting(clock);
 }
 
-static void read_raw_rssi_cmd(const void *data, uint8_t size)
+static void read_raw_rssi_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint16_t handle = get_le16(data);
 
        print_handle(handle);
 }
 
-static void read_raw_rssi_rsp(const void *data, uint8_t size)
+static void read_raw_rssi_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint16_t handle = get_le16(data + 1);
@@ -378,7 +391,7 @@ static void read_raw_rssi_rsp(const void *data, uint8_t size)
        print_rssi(rssi);
 }
 
-static void write_ram_cmd(const void *data, uint8_t size)
+static void write_ram_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint32_t addr = get_le32(data);
 
@@ -387,7 +400,7 @@ static void write_ram_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 4, size - 4);
 }
 
-static void read_ram_cmd(const void *data, uint8_t size)
+static void read_ram_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint32_t addr = get_le32(data);
        uint8_t length = get_u8(data + 4);
@@ -396,7 +409,7 @@ static void read_ram_cmd(const void *data, uint8_t size)
        print_field("Length: %u", length);
 }
 
-static void read_ram_rsp(const void *data, uint8_t size)
+static void read_ram_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
 
@@ -405,7 +418,7 @@ static void read_ram_rsp(const void *data, uint8_t size)
        packet_hexdump(data + 1, size - 1);
 }
 
-static void launch_ram_cmd(const void *data, uint8_t size)
+static void launch_ram_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint32_t addr = get_le32(data);
 
@@ -901,7 +914,7 @@ static const struct subcmd_data le_multi_advt_table[] = {
        { }
 };
 
-static void le_multi_advt_cmd(const void *data, uint8_t size)
+static void le_multi_advt_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t subcmd = *((const uint8_t *)data);
        struct subcmd_data unknown;
@@ -932,13 +945,13 @@ static const struct subcmd_data le_rpa_offload_table[] = {
        { 0x03, "Remove IRK from the list",
                remove_irk_from_list_subcmd, 7, true },
        { 0x04, "Clear IRK list",
-               null_cmd, 0, true },
+               null_cmd_without_index, 0, true },
        { 0x05, "Read IRK list entry",
                read_irk_list_entry_subcmd, 1, true },
        { }
 };
 
-static void le_rpa_offload_cmd(const void *data, uint8_t size)
+static void le_rpa_offload_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t subcmd = *((const uint8_t *)data);
        struct subcmd_data unknown;
@@ -981,7 +994,7 @@ static const struct subcmd_data le_apcf_table[] = {
        { }
 };
 
-static void le_apcf_cmd(const void *data, uint8_t size)
+static void le_apcf_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t subcmd = *((const uint8_t *)data);
        struct subcmd_data unknown;
@@ -1005,7 +1018,7 @@ static void le_apcf_cmd(const void *data, uint8_t size)
 }
 #endif
 
-static void read_vid_pid_rsp(const void *data, uint8_t size)
+static void read_vid_pid_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint16_t vid = get_le16(data + 1);
@@ -1015,7 +1028,8 @@ static void read_vid_pid_rsp(const void *data, uint8_t size)
        print_field("Product: %4.4x:%4.4x", vid, pid);
 }
 
-static void write_high_priority_connection_cmd(const void *data, uint8_t size)
+static void write_high_priority_connection_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint16_t handle = get_le16(data);
        uint8_t priority = get_u8(data + 2);
@@ -1076,7 +1090,8 @@ static void print_features(const uint8_t *features_array)
                                                "(0x%16.16" PRIx64 ")", mask);
 }
 
-static void read_controller_features_rsp(const void *data, uint8_t size)
+static void read_controller_features_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t status = get_u8(data);
 
@@ -1084,7 +1099,8 @@ static void read_controller_features_rsp(const void *data, uint8_t size)
        print_features(data + 1);
 }
 
-static void read_verbose_version_info_rsp(const void *data, uint8_t size)
+static void read_verbose_version_info_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t chip_id = get_u8(data + 1);
@@ -1113,7 +1129,7 @@ static void read_verbose_version_info_rsp(const void *data, uint8_t size)
        print_field("Build number: %u (0x%4.4x)", build_num, build_num);
 }
 
-static void enable_wbs_cmd(const void *data, uint8_t size)
+static void enable_wbs_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t mode = get_u8(data);
        uint16_t codec = get_le16(data + 1);
@@ -1152,7 +1168,7 @@ static void enable_wbs_cmd(const void *data, uint8_t size)
 }
 
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
-static void get_vendor_capabilities_rsp(const void *data, uint8_t size)
+static void get_vendor_capabilities_rsp(uint16_t index,  const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t max_advt_instances = get_u8(data + 1);
@@ -1183,7 +1199,7 @@ static void get_vendor_capabilities_rsp(const void *data, uint8_t size)
                        "onlost per filter: %u", onlost_follow_per_filter);
 }
 
-static void le_multi_advt_rsp(const void *data, uint8_t size)
+static void le_multi_advt_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t subcmd = get_u8(data + 1);
@@ -1202,7 +1218,7 @@ static void le_multi_advt_rsp(const void *data, uint8_t size)
        print_field("Multi Advertise OPcode: %s (%u)", str, subcmd);
 }
 
-static void le_rpa_offload_rsp(const void *data, uint8_t size)
+static void le_rpa_offload_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t subcmd = get_u8(data + 1);
@@ -1221,7 +1237,7 @@ static void le_rpa_offload_rsp(const void *data, uint8_t size)
        print_field("RPA Offload OPcode: %s (%u)", str, subcmd);
 }
 
-static void le_apcf_rsp(const void *data, uint8_t size)
+static void le_apcf_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t subcmd = get_u8(data + 1);
@@ -1410,7 +1426,7 @@ struct hci_vse_sec_brcm_link_loss_dbg_info{
        unsigned char   lmp_cmd[4];
 } __packed;
 
-static void linkloss_evt(const void *data, uint8_t size)
+static void linkloss_evt(uint16_t index, const void *data, uint8_t size)
 {
 
          struct hci_vse_sec_brcm_link_loss_dbg_info *ev = (void *) data;
@@ -1449,7 +1465,7 @@ static void linkloss_evt(const void *data, uint8_t size)
 }
 #endif
 
-static void lm_diag_evt(const void *data, uint8_t size)
+static void lm_diag_evt(uint16_t index, const void *data, uint8_t size)
 {
        broadcom_lm_diag(data, 63);
 }
index cdb366a..2584cf5 100755 (executable)
@@ -85,18 +85,18 @@ static void print_module(uint8_t module)
        print_field("Module: %s (0x%2.2x)", str, module);
 }
 
-static void null_cmd(const void *data, uint8_t size)
+static void null_cmd(uint16_t index, const void *data, uint8_t size)
 {
 }
 
-static void status_rsp(const void *data, uint8_t size)
+static void status_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
 
        print_status(status);
 }
 
-static void reset_cmd(const void *data, uint8_t size)
+static void reset_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t reset_type = get_u8(data);
        uint8_t patch_enable = get_u8(data + 1);
@@ -325,7 +325,7 @@ static void read_version_tlv_rsp(const void *data, uint8_t size)
        }
 }
 
-static void read_version_rsp(const void *data, uint8_t size)
+static void read_version_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t hw_platform = get_u8(data + 1);
@@ -362,7 +362,7 @@ static void read_version_rsp(const void *data, uint8_t size)
        print_field("Firmware patch: %u", fw_patch);
 }
 
-static void read_version_cmd(const void *data, uint8_t size)
+static void read_version_cmd(uint16_t index, const void *data, uint8_t size)
 {
        char *str;
        uint8_t type;
@@ -405,7 +405,8 @@ static void read_version_cmd(const void *data, uint8_t size)
        }
 }
 
-static void set_uart_baudrate_cmd(const void *data, uint8_t size)
+static void set_uart_baudrate_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t baudrate = get_u8(data);
        const char *str;
@@ -464,7 +465,7 @@ static void set_uart_baudrate_cmd(const void *data, uint8_t size)
        print_field("Baudrate: %s (0x%2.2x)", str, baudrate);
 }
 
-static void secure_send_cmd(const void *data, uint8_t size)
+static void secure_send_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t type = get_u8(data);
        const char *str;
@@ -492,7 +493,8 @@ static void secure_send_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 1, size - 1);
 }
 
-static void manufacturer_mode_cmd(const void *data, uint8_t size)
+static void manufacturer_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t mode = get_u8(data);
        uint8_t reset = get_u8(data + 1);
@@ -530,7 +532,7 @@ static void manufacturer_mode_cmd(const void *data, uint8_t size)
        print_field("Reset behavior: %s (0x%2.2x)", str, reset);
 }
 
-static void write_bd_data_cmd(const void *data, uint8_t size)
+static void write_bd_data_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t features[8];
 
@@ -547,7 +549,7 @@ static void write_bd_data_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 21, size - 21);
 }
 
-static void read_bd_data_rsp(const void *data, uint8_t size)
+static void read_bd_data_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
 
@@ -556,12 +558,12 @@ static void read_bd_data_rsp(const void *data, uint8_t size)
        packet_hexdump(data + 7, size - 7);
 }
 
-static void write_bd_address_cmd(const void *data, uint8_t size)
+static void write_bd_address_cmd(uint16_t index, const void *data, uint8_t size)
 {
        packet_print_addr("Address", data, 0x00);
 }
 
-static void act_deact_traces_cmd(const void *data, uint8_t size)
+static void act_deact_traces_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t tx = get_u8(data);
        uint8_t tx_arq = get_u8(data + 1);
@@ -572,7 +574,8 @@ static void act_deact_traces_cmd(const void *data, uint8_t size)
        print_field("Receive traces: 0x%2.2x", rx);
 }
 
-static void stimulate_exception_cmd(const void *data, uint8_t size)
+static void stimulate_exception_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t type = get_u8(data);
        const char *str;
@@ -608,7 +611,7 @@ static const struct {
        { }
 };
 
-static void set_event_mask_cmd(const void *data, uint8_t size)
+static void set_event_mask_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const uint8_t *events_array = data;
        uint64_t mask, events = 0;
@@ -633,7 +636,7 @@ static void set_event_mask_cmd(const void *data, uint8_t size)
                                                "(0x%16.16" PRIx64 ")", mask);
 }
 
-static void ddc_config_write_cmd(const void *data, uint8_t size)
+static void ddc_config_write_cmd(uint16_t index, const void *data, uint8_t size)
 {
        while (size > 0) {
                uint8_t param_len = get_u8(data);
@@ -647,7 +650,7 @@ static void ddc_config_write_cmd(const void *data, uint8_t size)
        }
 }
 
-static void ddc_config_write_rsp(const void *data, uint8_t size)
+static void ddc_config_write_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint16_t param_id = get_le16(data + 1);
@@ -656,7 +659,7 @@ static void ddc_config_write_rsp(const void *data, uint8_t size)
        print_field("Identifier: 0x%4.4x", param_id);
 }
 
-static void memory_write_cmd(const void *data, uint8_t size)
+static void memory_write_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint32_t addr = get_le32(data);
        uint8_t mode = get_u8(data + 4);
@@ -686,14 +689,16 @@ static void memory_write_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 6, size - 6);
 }
 
-static void read_supported_features_cmd(const void *data, uint8_t size)
+static void read_supported_features_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t page = get_u8(data);
 
        print_field("Page: 0x%2.2x", page);
 }
 
-static void read_supported_features_rsp(const void *data, uint8_t size)
+static void read_supported_features_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t page = get_u8(data + 1);
@@ -787,11 +792,11 @@ const struct vendor_ocf *intel_vendor_ocf(uint16_t ocf)
        return NULL;
 }
 
-static void startup_evt(const void *data, uint8_t size)
+static void startup_evt(uint16_t index, const void *data, uint8_t size)
 {
 }
 
-static void fatal_exception_evt(const void *data, uint8_t size)
+static void fatal_exception_evt(uint16_t index, const void *data, uint8_t size)
 {
        uint16_t line = get_le16(data);
        uint8_t module = get_u8(data + 2);
@@ -802,7 +807,7 @@ static void fatal_exception_evt(const void *data, uint8_t size)
        print_field("Reason: 0x%2.2x", reason);
 }
 
-static void bootup_evt(const void *data, uint8_t size)
+static void bootup_evt(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t zero = get_u8(data);
        uint8_t num_packets = get_u8(data + 1);
@@ -905,7 +910,7 @@ static void bootup_evt(const void *data, uint8_t size)
        print_field("DDC status: %s (0x%2.2x)", str, ddc_status);
 }
 
-static void default_bd_data_evt(const void *data, uint8_t size)
+static void default_bd_data_evt(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t mem_status = get_u8(data);
        const char *str;
@@ -922,7 +927,8 @@ static void default_bd_data_evt(const void *data, uint8_t size)
        print_field("Memory status: %s (0x%2.2x)", str, mem_status);
 }
 
-static void secure_send_commands_result_evt(const void *data, uint8_t size)
+static void secure_send_commands_result_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t result = get_u8(data);
        uint16_t opcode = get_le16(data + 1);
@@ -966,7 +972,7 @@ static void secure_send_commands_result_evt(const void *data, uint8_t size)
        print_status(status);
 }
 
-static void debug_exception_evt(const void *data, uint8_t size)
+static void debug_exception_evt(uint16_t index, const void *data, uint8_t size)
 {
        uint16_t line = get_le16(data);
        uint8_t module = get_u8(data + 2);
@@ -977,7 +983,8 @@ static void debug_exception_evt(const void *data, uint8_t size)
        print_field("Reason: 0x%2.2x", reason);
 }
 
-static void le_link_established_evt(const void *data, uint8_t size)
+static void le_link_established_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint16_t handle = get_le16(data);
        uint32_t access_addr = get_le32(data + 10);
@@ -991,7 +998,7 @@ static void le_link_established_evt(const void *data, uint8_t size)
        packet_hexdump(data + 14, size - 14);
 }
 
-static void scan_status_evt(const void *data, uint8_t size)
+static void scan_status_evt(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t enable = get_u8(data);
 
@@ -1006,14 +1013,15 @@ static void scan_status_evt(const void *data, uint8_t size)
 
 }
 
-static void act_deact_traces_complete_evt(const void *data, uint8_t size)
+static void act_deact_traces_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t status = get_u8(data);
 
        print_status(status);
 }
 
-static void lmp_pdu_trace_evt(const void *data, uint8_t size)
+static void lmp_pdu_trace_evt(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t type, len, id;
        uint16_t handle, count;
@@ -1107,14 +1115,16 @@ static void lmp_pdu_trace_evt(const void *data, uint8_t size)
        }
 }
 
-static void write_bd_data_complete_evt(const void *data, uint8_t size)
+static void write_bd_data_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t status = get_u8(data);
 
        print_status(status);
 }
 
-static void sco_rejected_via_lmp_evt(const void *data, uint8_t size)
+static void sco_rejected_via_lmp_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint8_t reason = get_u8(data + 6);
 
@@ -1122,7 +1132,8 @@ static void sco_rejected_via_lmp_evt(const void *data, uint8_t size)
        packet_print_error("Reason", reason);
 }
 
-static void ptt_switch_notification_evt(const void *data, uint8_t size)
+static void ptt_switch_notification_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        uint16_t handle = get_le16(data);
        uint8_t table = get_u8(data + 2);
@@ -1145,7 +1156,7 @@ static void ptt_switch_notification_evt(const void *data, uint8_t size)
        print_field("Packet type table: %s (0x%2.2x)", str, table);
 }
 
-static void system_exception_evt(const void *data, uint8_t size)
+static void system_exception_evt(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t type = get_u8(data);
        const char *str;
@@ -1613,7 +1624,7 @@ static const struct intel_tlv *process_ext_subevent(const struct intel_tlv *tlv,
        return next_tlv;
 }
 
-static void intel_vendor_ext_evt(const void *data, uint8_t size)
+static void intel_vendor_ext_evt(uint16_t index, const void *data, uint8_t size)
 {
        /* The data pointer points to a number of tlv.*/
        const struct intel_tlv *tlv = data;
index 8b6e9b5..9418350 100644 (file)
@@ -221,7 +221,7 @@ static const struct {
        { }
 };
 
-static void msft_cmd(const void *data, uint8_t size)
+static void msft_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t code = get_u8(data);
        const char *code_color, *code_str = NULL;
@@ -255,7 +255,7 @@ static void msft_cmd(const void *data, uint8_t size)
                packet_hexdump(data + 1, size - 1);
 }
 
-static void msft_rsp(const void *data, uint8_t size)
+static void msft_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = get_u8(data);
        uint8_t code = get_u8(data + 1);
@@ -301,7 +301,7 @@ const struct vendor_ocf *msft_vendor_ocf(void)
        return &vendor_ocf_entry;
 }
 
-static void msft_evt(const void *data, uint8_t size)
+static void msft_evt(uint16_t index, const void *data, uint8_t size)
 {
        packet_hexdump(data, size);
 }
index b281c23..11198cf 100755 (executable)
@@ -168,21 +168,24 @@ static uint16_t get_format(uint32_t cookie)
 
 #define MAX_CONN 16
 
-struct conn_data {
-       uint16_t handle;
-       uint8_t  type;
-};
-
-static struct conn_data conn_list[MAX_CONN];
+static struct packet_conn_data conn_list[MAX_CONN];
 
-static void assign_handle(uint16_t handle, uint8_t type)
+static void assign_handle(uint16_t index, uint16_t handle, uint8_t type,
+                                       uint8_t *dst, uint8_t dst_type)
 {
        int i;
 
        for (i = 0; i < MAX_CONN; i++) {
                if (conn_list[i].handle == 0x0000) {
+                       conn_list[i].index = index;
                        conn_list[i].handle = handle;
                        conn_list[i].type = type;
+
+                       if (!dst)
+                               break;
+
+                       memcpy(conn_list[i].dst, dst, sizeof(conn_list[i].dst));
+                       conn_list[i].dst_type = dst_type;
                        break;
                }
        }
@@ -194,23 +197,36 @@ static void release_handle(uint16_t handle)
 
        for (i = 0; i < MAX_CONN; i++) {
                if (conn_list[i].handle == handle) {
-                       conn_list[i].handle = 0x0000;
-                       conn_list[i].type = 0x00;
+                       if (conn_list[i].destroy)
+                               conn_list[i].destroy(conn_list[i].data);
+
+                       memset(&conn_list[i], 0, sizeof(conn_list[i]));
                        break;
                }
        }
 }
 
-static uint8_t get_type(uint16_t handle)
+struct packet_conn_data *packet_get_conn_data(uint16_t handle)
 {
        int i;
 
        for (i = 0; i < MAX_CONN; i++) {
                if (conn_list[i].handle == handle)
-                       return conn_list[i].type;
+                       return &conn_list[i];
        }
 
-       return 0xff;
+       return NULL;
+}
+
+static uint8_t get_type(uint16_t handle)
+{
+       struct packet_conn_data *conn;
+
+       conn = packet_get_conn_data(handle);
+       if (!conn)
+               return 0xff;
+
+       return conn->type;
 }
 
 bool packet_has_filter(unsigned long filter)
@@ -738,7 +754,17 @@ static void print_lt_addr(uint8_t lt_addr)
 
 static void print_handle_native(uint16_t handle)
 {
-       print_field("Handle: %d", handle);
+       struct packet_conn_data *conn;
+       char label[25];
+
+       conn = packet_get_conn_data(handle);
+       if (!conn) {
+               print_field("Handle: %d", handle);
+               return;
+       }
+
+       sprintf(label, "Handle: %d Address", handle);
+       print_addr("  Address", conn->dst, conn->dst_type);
 }
 
 static void print_handle(uint16_t handle)
@@ -4261,18 +4287,18 @@ void packet_simulator(struct timeval *tv, uint16_t frequency,
        ll_packet(frequency, data, size, false);
 }
 
-static void null_cmd(const void *data, uint8_t size)
+static void null_cmd(uint16_t index, const void *data, uint8_t size)
 {
 }
 
-static void status_rsp(const void *data, uint8_t size)
+static void status_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = *((const uint8_t *) data);
 
        print_status(status);
 }
 
-static void status_handle_rsp(const void *data, uint8_t size)
+static void status_handle_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = *((const uint8_t *) data);
 
@@ -4280,7 +4306,7 @@ static void status_handle_rsp(const void *data, uint8_t size)
        print_field("Connection handle: %d", get_u8(data + 1));
 }
 
-static void status_bdaddr_rsp(const void *data, uint8_t size)
+static void status_bdaddr_rsp(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t status = *((const uint8_t *) data);
 
@@ -4288,7 +4314,7 @@ static void status_bdaddr_rsp(const void *data, uint8_t size)
        print_bdaddr(data + 1);
 }
 
-static void inquiry_cmd(const void *data, uint8_t size)
+static void inquiry_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_inquiry *cmd = data;
 
@@ -4298,7 +4324,7 @@ static void inquiry_cmd(const void *data, uint8_t size)
        print_num_resp(cmd->num_resp);
 }
 
-static void periodic_inquiry_cmd(const void *data, uint8_t size)
+static void periodic_inquiry_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_periodic_inquiry *cmd = data;
 
@@ -4312,7 +4338,7 @@ static void periodic_inquiry_cmd(const void *data, uint8_t size)
        print_num_resp(cmd->num_resp);
 }
 
-static void create_conn_cmd(const void *data, uint8_t size)
+static void create_conn_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_create_conn *cmd = data;
        const char *str;
@@ -4338,7 +4364,7 @@ static void create_conn_cmd(const void *data, uint8_t size)
        print_field("Role switch: %s (0x%2.2x)", str, cmd->role_switch);
 }
 
-static void disconnect_cmd(const void *data, uint8_t size)
+static void disconnect_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_disconnect *cmd = data;
 
@@ -4346,7 +4372,7 @@ static void disconnect_cmd(const void *data, uint8_t size)
        print_reason(cmd->reason);
 }
 
-static void add_sco_conn_cmd(const void *data, uint8_t size)
+static void add_sco_conn_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_add_sco_conn *cmd = data;
 
@@ -4354,14 +4380,16 @@ static void add_sco_conn_cmd(const void *data, uint8_t size)
        print_pkt_type_sco(cmd->pkt_type);
 }
 
-static void create_conn_cancel_cmd(const void *data, uint8_t size)
+static void create_conn_cancel_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_create_conn_cancel *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void accept_conn_request_cmd(const void *data, uint8_t size)
+static void accept_conn_request_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_accept_conn_request *cmd = data;
 
@@ -4369,7 +4397,8 @@ static void accept_conn_request_cmd(const void *data, uint8_t size)
        print_role(cmd->role);
 }
 
-static void reject_conn_request_cmd(const void *data, uint8_t size)
+static void reject_conn_request_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_reject_conn_request *cmd = data;
 
@@ -4377,7 +4406,8 @@ static void reject_conn_request_cmd(const void *data, uint8_t size)
        print_reason(cmd->reason);
 }
 
-static void link_key_request_reply_cmd(const void *data, uint8_t size)
+static void link_key_request_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_link_key_request_reply *cmd = data;
 
@@ -4385,14 +4415,16 @@ static void link_key_request_reply_cmd(const void *data, uint8_t size)
        print_link_key(cmd->link_key);
 }
 
-static void link_key_request_neg_reply_cmd(const void *data, uint8_t size)
+static void link_key_request_neg_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_link_key_request_neg_reply *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void pin_code_request_reply_cmd(const void *data, uint8_t size)
+static void pin_code_request_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_pin_code_request_reply *cmd = data;
 
@@ -4401,14 +4433,16 @@ static void pin_code_request_reply_cmd(const void *data, uint8_t size)
        print_pin_code(cmd->pin_code, cmd->pin_len);
 }
 
-static void pin_code_request_neg_reply_cmd(const void *data, uint8_t size)
+static void pin_code_request_neg_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_pin_code_request_neg_reply *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void change_conn_pkt_type_cmd(const void *data, uint8_t size)
+static void change_conn_pkt_type_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_change_conn_pkt_type *cmd = data;
 
@@ -4416,14 +4450,14 @@ static void change_conn_pkt_type_cmd(const void *data, uint8_t size)
        print_pkt_type(cmd->pkt_type);
 }
 
-static void auth_requested_cmd(const void *data, uint8_t size)
+static void auth_requested_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_auth_requested *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void set_conn_encrypt_cmd(const void *data, uint8_t size)
+static void set_conn_encrypt_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_set_conn_encrypt *cmd = data;
 
@@ -4431,21 +4465,24 @@ static void set_conn_encrypt_cmd(const void *data, uint8_t size)
        print_enable("Encryption", cmd->encr_mode);
 }
 
-static void change_conn_link_key_cmd(const void *data, uint8_t size)
+static void change_conn_link_key_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_change_conn_link_key *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void link_key_selection_cmd(const void *data, uint8_t size)
+static void link_key_selection_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_link_key_selection *cmd = data;
 
        print_key_flag(cmd->key_flag);
 }
 
-static void remote_name_request_cmd(const void *data, uint8_t size)
+static void remote_name_request_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_remote_name_request *cmd = data;
 
@@ -4455,21 +4492,24 @@ static void remote_name_request_cmd(const void *data, uint8_t size)
        print_clock_offset(cmd->clock_offset);
 }
 
-static void remote_name_request_cancel_cmd(const void *data, uint8_t size)
+static void remote_name_request_cancel_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_remote_name_request_cancel *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void read_remote_features_cmd(const void *data, uint8_t size)
+static void read_remote_features_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_remote_features *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_remote_ext_features_cmd(const void *data, uint8_t size)
+static void read_remote_ext_features_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_remote_ext_features *cmd = data;
 
@@ -4477,28 +4517,30 @@ static void read_remote_ext_features_cmd(const void *data, uint8_t size)
        print_field("Page: %d", cmd->page);
 }
 
-static void read_remote_version_cmd(const void *data, uint8_t size)
+static void read_remote_version_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_remote_version *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_clock_offset_cmd(const void *data, uint8_t size)
+static void read_clock_offset_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_clock_offset *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_lmp_handle_cmd(const void *data, uint8_t size)
+static void read_lmp_handle_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_read_lmp_handle *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_lmp_handle_rsp(const void *data, uint8_t size)
+static void read_lmp_handle_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_lmp_handle *rsp = data;
 
@@ -4508,7 +4550,7 @@ static void read_lmp_handle_rsp(const void *data, uint8_t size)
        print_field("Reserved: %d", le32_to_cpu(rsp->reserved));
 }
 
-static void setup_sync_conn_cmd(const void *data, uint8_t size)
+static void setup_sync_conn_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_setup_sync_conn *cmd = data;
 
@@ -4521,7 +4563,8 @@ static void setup_sync_conn_cmd(const void *data, uint8_t size)
        print_pkt_type_sco(cmd->pkt_type);
 }
 
-static void accept_sync_conn_request_cmd(const void *data, uint8_t size)
+static void accept_sync_conn_request_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_accept_sync_conn_request *cmd = data;
 
@@ -4534,7 +4577,8 @@ static void accept_sync_conn_request_cmd(const void *data, uint8_t size)
        print_pkt_type_sco(cmd->pkt_type);
 }
 
-static void reject_sync_conn_request_cmd(const void *data, uint8_t size)
+static void reject_sync_conn_request_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_reject_sync_conn_request *cmd = data;
 
@@ -4542,7 +4586,8 @@ static void reject_sync_conn_request_cmd(const void *data, uint8_t size)
        print_reason(cmd->reason);
 }
 
-static void io_capability_request_reply_cmd(const void *data, uint8_t size)
+static void io_capability_request_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_io_capability_request_reply *cmd = data;
 
@@ -4552,21 +4597,24 @@ static void io_capability_request_reply_cmd(const void *data, uint8_t size)
        print_authentication(cmd->authentication);
 }
 
-static void user_confirm_request_reply_cmd(const void *data, uint8_t size)
+static void user_confirm_request_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_user_confirm_request_reply *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void user_confirm_request_neg_reply_cmd(const void *data, uint8_t size)
+static void user_confirm_request_neg_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_user_confirm_request_neg_reply *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void user_passkey_request_reply_cmd(const void *data, uint8_t size)
+static void user_passkey_request_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_user_passkey_request_reply *cmd = data;
 
@@ -4574,14 +4622,16 @@ static void user_passkey_request_reply_cmd(const void *data, uint8_t size)
        print_passkey(cmd->passkey);
 }
 
-static void user_passkey_request_neg_reply_cmd(const void *data, uint8_t size)
+static void user_passkey_request_neg_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_user_passkey_request_neg_reply *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void remote_oob_data_request_reply_cmd(const void *data, uint8_t size)
+static void remote_oob_data_request_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_remote_oob_data_request_reply *cmd = data;
 
@@ -4590,14 +4640,16 @@ static void remote_oob_data_request_reply_cmd(const void *data, uint8_t size)
        print_randomizer_p192(cmd->randomizer);
 }
 
-static void remote_oob_data_request_neg_reply_cmd(const void *data, uint8_t size)
+static void remote_oob_data_request_neg_reply_cmd(uint16_t index,
+                                               const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_remote_oob_data_request_neg_reply *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void io_capability_request_neg_reply_cmd(const void *data, uint8_t size)
+static void io_capability_request_neg_reply_cmd(uint16_t index,
+                                               const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_io_capability_request_neg_reply *cmd = data;
 
@@ -4605,7 +4657,7 @@ static void io_capability_request_neg_reply_cmd(const void *data, uint8_t size)
        print_reason(cmd->reason);
 }
 
-static void create_phy_link_cmd(const void *data, uint8_t size)
+static void create_phy_link_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_create_phy_link *cmd = data;
 
@@ -4616,7 +4668,7 @@ static void create_phy_link_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 3, size - 3);
 }
 
-static void accept_phy_link_cmd(const void *data, uint8_t size)
+static void accept_phy_link_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_accept_phy_link *cmd = data;
 
@@ -4627,7 +4679,7 @@ static void accept_phy_link_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 3, size - 3);
 }
 
-static void disconn_phy_link_cmd(const void *data, uint8_t size)
+static void disconn_phy_link_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_disconn_phy_link *cmd = data;
 
@@ -4635,7 +4687,8 @@ static void disconn_phy_link_cmd(const void *data, uint8_t size)
        print_reason(cmd->reason);
 }
 
-static void create_logic_link_cmd(const void *data, uint8_t size)
+static void create_logic_link_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_create_logic_link *cmd = data;
 
@@ -4644,7 +4697,8 @@ static void create_logic_link_cmd(const void *data, uint8_t size)
        print_flow_spec("RX", cmd->rx_flow_spec);
 }
 
-static void accept_logic_link_cmd(const void *data, uint8_t size)
+static void accept_logic_link_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_accept_logic_link *cmd = data;
 
@@ -4653,14 +4707,16 @@ static void accept_logic_link_cmd(const void *data, uint8_t size)
        print_flow_spec("RX", cmd->rx_flow_spec);
 }
 
-static void disconn_logic_link_cmd(const void *data, uint8_t size)
+static void disconn_logic_link_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_disconn_logic_link *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void logic_link_cancel_cmd(const void *data, uint8_t size)
+static void logic_link_cancel_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_logic_link_cancel *cmd = data;
 
@@ -4668,7 +4724,8 @@ static void logic_link_cancel_cmd(const void *data, uint8_t size)
        print_field("TX flow spec: 0x%2.2x", cmd->flow_spec);
 }
 
-static void logic_link_cancel_rsp(const void *data, uint8_t size)
+static void logic_link_cancel_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_logic_link_cancel *rsp = data;
 
@@ -4677,7 +4734,7 @@ static void logic_link_cancel_rsp(const void *data, uint8_t size)
        print_field("TX flow spec: 0x%2.2x", rsp->flow_spec);
 }
 
-static void flow_spec_modify_cmd(const void *data, uint8_t size)
+static void flow_spec_modify_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_flow_spec_modify *cmd = data;
 
@@ -4686,7 +4743,8 @@ static void flow_spec_modify_cmd(const void *data, uint8_t size)
        print_flow_spec("RX", cmd->rx_flow_spec);
 }
 
-static void enhanced_setup_sync_conn_cmd(const void *data, uint8_t size)
+static void enhanced_setup_sync_conn_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_enhanced_setup_sync_conn *cmd = data;
 
@@ -4701,7 +4759,9 @@ static void enhanced_setup_sync_conn_cmd(const void *data, uint8_t size)
        print_retransmission_effort(cmd->retrans_effort);
 }
 
-static void enhanced_accept_sync_conn_request_cmd(const void *data, uint8_t size)
+static void enhanced_accept_sync_conn_request_cmd(uint16_t index,
+                                               const void *data,
+                                               uint8_t size)
 {
        const struct bt_hci_cmd_enhanced_accept_sync_conn_request *cmd = data;
 
@@ -4716,7 +4776,7 @@ static void enhanced_accept_sync_conn_request_cmd(const void *data, uint8_t size
        print_retransmission_effort(cmd->retrans_effort);
 }
 
-static void truncated_page_cmd(const void *data, uint8_t size)
+static void truncated_page_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_truncated_page *cmd = data;
 
@@ -4725,14 +4785,16 @@ static void truncated_page_cmd(const void *data, uint8_t size)
        print_clock_offset(cmd->clock_offset);
 }
 
-static void truncated_page_cancel_cmd(const void *data, uint8_t size)
+static void truncated_page_cancel_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_truncated_page_cancel *cmd = data;
 
        print_bdaddr(cmd->bdaddr);
 }
 
-static void set_peripheral_broadcast_cmd(const void *data, uint8_t size)
+static void set_peripheral_broadcast_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_set_peripheral_broadcast *cmd = data;
 
@@ -4745,7 +4807,8 @@ static void set_peripheral_broadcast_cmd(const void *data, uint8_t size)
        print_slot_625("Supervision timeout", cmd->timeout);
 }
 
-static void set_peripheral_broadcast_rsp(const void *data, uint8_t size)
+static void set_peripheral_broadcast_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_set_peripheral_broadcast *rsp = data;
 
@@ -4754,7 +4817,8 @@ static void set_peripheral_broadcast_rsp(const void *data, uint8_t size)
        print_interval(rsp->interval);
 }
 
-static void set_peripheral_broadcast_receive_cmd(const void *data, uint8_t size)
+static void set_peripheral_broadcast_receive_cmd(uint16_t index,
+                                               const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_set_peripheral_broadcast_receive *cmd = data;
 
@@ -4772,7 +4836,8 @@ static void set_peripheral_broadcast_receive_cmd(const void *data, uint8_t size)
        print_channel_map(cmd->map);
 }
 
-static void set_peripheral_broadcast_receive_rsp(const void *data, uint8_t size)
+static void set_peripheral_broadcast_receive_rsp(uint16_t index,
+                                               const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_set_peripheral_broadcast_receive *rsp = data;
 
@@ -4781,7 +4846,8 @@ static void set_peripheral_broadcast_receive_rsp(const void *data, uint8_t size)
        print_lt_addr(rsp->lt_addr);
 }
 
-static void receive_sync_train_cmd(const void *data, uint8_t size)
+static void receive_sync_train_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_receive_sync_train *cmd = data;
 
@@ -4791,7 +4857,8 @@ static void receive_sync_train_cmd(const void *data, uint8_t size)
        print_interval(cmd->interval);
 }
 
-static void remote_oob_ext_data_request_reply_cmd(const void *data, uint8_t size)
+static void remote_oob_ext_data_request_reply_cmd(uint16_t index,
+                                               const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_remote_oob_ext_data_request_reply *cmd = data;
 
@@ -4802,7 +4869,7 @@ static void remote_oob_ext_data_request_reply_cmd(const void *data, uint8_t size
        print_randomizer_p256(cmd->randomizer256);
 }
 
-static void hold_mode_cmd(const void *data, uint8_t size)
+static void hold_mode_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_hold_mode *cmd = data;
 
@@ -4811,7 +4878,7 @@ static void hold_mode_cmd(const void *data, uint8_t size)
        print_slot_625("Hold min interval", cmd->min_interval);
 }
 
-static void sniff_mode_cmd(const void *data, uint8_t size)
+static void sniff_mode_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_sniff_mode *cmd = data;
 
@@ -4822,14 +4889,14 @@ static void sniff_mode_cmd(const void *data, uint8_t size)
        print_slot_125("Sniff timeout", cmd->timeout);
 }
 
-static void exit_sniff_mode_cmd(const void *data, uint8_t size)
+static void exit_sniff_mode_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_exit_sniff_mode *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void park_state_cmd(const void *data, uint8_t size)
+static void park_state_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_park_state *cmd = data;
 
@@ -4838,14 +4905,14 @@ static void park_state_cmd(const void *data, uint8_t size)
        print_slot_625("Beacon min interval", cmd->min_interval);
 }
 
-static void exit_park_state_cmd(const void *data, uint8_t size)
+static void exit_park_state_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_exit_park_state *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void qos_setup_cmd(const void *data, uint8_t size)
+static void qos_setup_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_qos_setup *cmd = data;
 
@@ -4860,14 +4927,14 @@ static void qos_setup_cmd(const void *data, uint8_t size)
        print_field("Delay variation: %d", le32_to_cpu(cmd->delay_variation));
 }
 
-static void role_discovery_cmd(const void *data, uint8_t size)
+static void role_discovery_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_role_discovery *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void role_discovery_rsp(const void *data, uint8_t size)
+static void role_discovery_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_role_discovery *rsp = data;
 
@@ -4876,7 +4943,7 @@ static void role_discovery_rsp(const void *data, uint8_t size)
        print_role(rsp->role);
 }
 
-static void switch_role_cmd(const void *data, uint8_t size)
+static void switch_role_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_switch_role *cmd = data;
 
@@ -4884,14 +4951,14 @@ static void switch_role_cmd(const void *data, uint8_t size)
        print_role(cmd->role);
 }
 
-static void read_link_policy_cmd(const void *data, uint8_t size)
+static void read_link_policy_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_read_link_policy *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_link_policy_rsp(const void *data, uint8_t size)
+static void read_link_policy_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_link_policy *rsp = data;
 
@@ -4900,7 +4967,8 @@ static void read_link_policy_rsp(const void *data, uint8_t size)
        print_link_policy(rsp->policy);
 }
 
-static void write_link_policy_cmd(const void *data, uint8_t size)
+static void write_link_policy_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_link_policy *cmd = data;
 
@@ -4908,7 +4976,8 @@ static void write_link_policy_cmd(const void *data, uint8_t size)
        print_link_policy(cmd->policy);
 }
 
-static void write_link_policy_rsp(const void *data, uint8_t size)
+static void write_link_policy_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_write_link_policy *rsp = data;
 
@@ -4916,7 +4985,8 @@ static void write_link_policy_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void read_default_link_policy_rsp(const void *data, uint8_t size)
+static void read_default_link_policy_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_default_link_policy *rsp = data;
 
@@ -4924,14 +4994,15 @@ static void read_default_link_policy_rsp(const void *data, uint8_t size)
        print_link_policy(rsp->policy);
 }
 
-static void write_default_link_policy_cmd(const void *data, uint8_t size)
+static void write_default_link_policy_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_default_link_policy *cmd = data;
 
        print_link_policy(cmd->policy);
 }
 
-static void flow_spec_cmd(const void *data, uint8_t size)
+static void flow_spec_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_flow_spec *cmd = data;
 
@@ -4948,7 +5019,7 @@ static void flow_spec_cmd(const void *data, uint8_t size)
        print_field("Access latency: %d", le32_to_cpu(cmd->access_latency));
 }
 
-static void sniff_subrating_cmd(const void *data, uint8_t size)
+static void sniff_subrating_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_sniff_subrating *cmd = data;
 
@@ -4958,7 +5029,7 @@ static void sniff_subrating_cmd(const void *data, uint8_t size)
        print_slot_625("Min local timeout", cmd->min_local_timeout);
 }
 
-static void sniff_subrating_rsp(const void *data, uint8_t size)
+static void sniff_subrating_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_sniff_subrating *rsp = data;
 
@@ -4966,14 +5037,14 @@ static void sniff_subrating_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void set_event_mask_cmd(const void *data, uint8_t size)
+static void set_event_mask_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_set_event_mask *cmd = data;
 
        print_event_mask(cmd->mask, events_table);
 }
 
-static void set_event_filter_cmd(const void *data, uint8_t size)
+static void set_event_filter_cmd(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t type = *((const uint8_t *) data);
        uint8_t filter;
@@ -5071,14 +5142,14 @@ static void set_event_filter_cmd(const void *data, uint8_t size)
        }
 }
 
-static void flush_cmd(const void *data, uint8_t size)
+static void flush_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_flush *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void flush_rsp(const void *data, uint8_t size)
+static void flush_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_flush *rsp = data;
 
@@ -5086,7 +5157,7 @@ static void flush_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void read_pin_type_rsp(const void *data, uint8_t size)
+static void read_pin_type_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_pin_type *rsp = data;
 
@@ -5094,14 +5165,15 @@ static void read_pin_type_rsp(const void *data, uint8_t size)
        print_pin_type(rsp->pin_type);
 }
 
-static void write_pin_type_cmd(const void *data, uint8_t size)
+static void write_pin_type_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_write_pin_type *cmd = data;
 
        print_pin_type(cmd->pin_type);
 }
 
-static void read_stored_link_key_cmd(const void *data, uint8_t size)
+static void read_stored_link_key_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_stored_link_key *cmd = data;
 
@@ -5109,7 +5181,8 @@ static void read_stored_link_key_cmd(const void *data, uint8_t size)
        print_field("Read all: 0x%2.2x", cmd->read_all);
 }
 
-static void read_stored_link_key_rsp(const void *data, uint8_t size)
+static void read_stored_link_key_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_stored_link_key *rsp = data;
 
@@ -5118,7 +5191,8 @@ static void read_stored_link_key_rsp(const void *data, uint8_t size)
        print_field("Num keys: %d", le16_to_cpu(rsp->num_keys));
 }
 
-static void write_stored_link_key_cmd(const void *data, uint8_t size)
+static void write_stored_link_key_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_stored_link_key *cmd = data;
 
@@ -5127,7 +5201,8 @@ static void write_stored_link_key_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 1, size - 1);
 }
 
-static void write_stored_link_key_rsp(const void *data, uint8_t size)
+static void write_stored_link_key_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_write_stored_link_key *rsp = data;
 
@@ -5135,7 +5210,8 @@ static void write_stored_link_key_rsp(const void *data, uint8_t size)
        print_field("Num keys: %d", rsp->num_keys);
 }
 
-static void delete_stored_link_key_cmd(const void *data, uint8_t size)
+static void delete_stored_link_key_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_delete_stored_link_key *cmd = data;
 
@@ -5143,7 +5219,8 @@ static void delete_stored_link_key_cmd(const void *data, uint8_t size)
        print_field("Delete all: 0x%2.2x", cmd->delete_all);
 }
 
-static void delete_stored_link_key_rsp(const void *data, uint8_t size)
+static void delete_stored_link_key_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_delete_stored_link_key *rsp = data;
 
@@ -5151,14 +5228,14 @@ static void delete_stored_link_key_rsp(const void *data, uint8_t size)
        print_field("Num keys: %d", le16_to_cpu(rsp->num_keys));
 }
 
-static void write_local_name_cmd(const void *data, uint8_t size)
+static void write_local_name_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_write_local_name *cmd = data;
 
        print_name(cmd->name);
 }
 
-static void read_local_name_rsp(const void *data, uint8_t size)
+static void read_local_name_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_local_name *rsp = data;
 
@@ -5166,7 +5243,8 @@ static void read_local_name_rsp(const void *data, uint8_t size)
        print_name(rsp->name);
 }
 
-static void read_conn_accept_timeout_rsp(const void *data, uint8_t size)
+static void read_conn_accept_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_conn_accept_timeout *rsp = data;
 
@@ -5174,14 +5252,16 @@ static void read_conn_accept_timeout_rsp(const void *data, uint8_t size)
        print_timeout(rsp->timeout);
 }
 
-static void write_conn_accept_timeout_cmd(const void *data, uint8_t size)
+static void write_conn_accept_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_conn_accept_timeout *cmd = data;
 
        print_timeout(cmd->timeout);
 }
 
-static void read_page_timeout_rsp(const void *data, uint8_t size)
+static void read_page_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_page_timeout *rsp = data;
 
@@ -5189,14 +5269,15 @@ static void read_page_timeout_rsp(const void *data, uint8_t size)
        print_timeout(rsp->timeout);
 }
 
-static void write_page_timeout_cmd(const void *data, uint8_t size)
+static void write_page_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_page_timeout *cmd = data;
 
        print_timeout(cmd->timeout);
 }
 
-static void read_scan_enable_rsp(const void *data, uint8_t size)
+static void read_scan_enable_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_scan_enable *rsp = data;
 
@@ -5204,14 +5285,16 @@ static void read_scan_enable_rsp(const void *data, uint8_t size)
        print_scan_enable(rsp->enable);
 }
 
-static void write_scan_enable_cmd(const void *data, uint8_t size)
+static void write_scan_enable_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_scan_enable *cmd = data;
 
        print_scan_enable(cmd->enable);
 }
 
-static void read_page_scan_activity_rsp(const void *data, uint8_t size)
+static void read_page_scan_activity_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_page_scan_activity *rsp = data;
 
@@ -5220,7 +5303,8 @@ static void read_page_scan_activity_rsp(const void *data, uint8_t size)
        print_window(rsp->window);
 }
 
-static void write_page_scan_activity_cmd(const void *data, uint8_t size)
+static void write_page_scan_activity_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_page_scan_activity *cmd = data;
 
@@ -5228,7 +5312,8 @@ static void write_page_scan_activity_cmd(const void *data, uint8_t size)
        print_window(cmd->window);
 }
 
-static void read_inquiry_scan_activity_rsp(const void *data, uint8_t size)
+static void read_inquiry_scan_activity_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_inquiry_scan_activity *rsp = data;
 
@@ -5237,7 +5322,8 @@ static void read_inquiry_scan_activity_rsp(const void *data, uint8_t size)
        print_window(rsp->window);
 }
 
-static void write_inquiry_scan_activity_cmd(const void *data, uint8_t size)
+static void write_inquiry_scan_activity_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_inquiry_scan_activity *cmd = data;
 
@@ -5245,7 +5331,7 @@ static void write_inquiry_scan_activity_cmd(const void *data, uint8_t size)
        print_window(cmd->window);
 }
 
-static void read_auth_enable_rsp(const void *data, uint8_t size)
+static void read_auth_enable_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_auth_enable *rsp = data;
 
@@ -5253,14 +5339,16 @@ static void read_auth_enable_rsp(const void *data, uint8_t size)
        print_auth_enable(rsp->enable);
 }
 
-static void write_auth_enable_cmd(const void *data, uint8_t size)
+static void write_auth_enable_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_auth_enable *cmd = data;
 
        print_auth_enable(cmd->enable);
 }
 
-static void read_encrypt_mode_rsp(const void *data, uint8_t size)
+static void read_encrypt_mode_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_encrypt_mode *rsp = data;
 
@@ -5268,14 +5356,16 @@ static void read_encrypt_mode_rsp(const void *data, uint8_t size)
        print_encrypt_mode(rsp->mode);
 }
 
-static void write_encrypt_mode_cmd(const void *data, uint8_t size)
+static void write_encrypt_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_encrypt_mode *cmd = data;
 
        print_encrypt_mode(cmd->mode);
 }
 
-static void read_class_of_dev_rsp(const void *data, uint8_t size)
+static void read_class_of_dev_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_class_of_dev *rsp = data;
 
@@ -5283,14 +5373,16 @@ static void read_class_of_dev_rsp(const void *data, uint8_t size)
        print_dev_class(rsp->dev_class);
 }
 
-static void write_class_of_dev_cmd(const void *data, uint8_t size)
+static void write_class_of_dev_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_class_of_dev *cmd = data;
 
        print_dev_class(cmd->dev_class);
 }
 
-static void read_voice_setting_rsp(const void *data, uint8_t size)
+static void read_voice_setting_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_voice_setting *rsp = data;
 
@@ -5298,21 +5390,24 @@ static void read_voice_setting_rsp(const void *data, uint8_t size)
        print_voice_setting(rsp->setting);
 }
 
-static void write_voice_setting_cmd(const void *data, uint8_t size)
+static void write_voice_setting_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_voice_setting *cmd = data;
 
        print_voice_setting(cmd->setting);
 }
 
-static void read_auto_flush_timeout_cmd(const void *data, uint8_t size)
+static void read_auto_flush_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_auto_flush_timeout *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_auto_flush_timeout_rsp(const void *data, uint8_t size)
+static void read_auto_flush_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_auto_flush_timeout *rsp = data;
 
@@ -5321,7 +5416,8 @@ static void read_auto_flush_timeout_rsp(const void *data, uint8_t size)
        print_flush_timeout(rsp->timeout);
 }
 
-static void write_auto_flush_timeout_cmd(const void *data, uint8_t size)
+static void write_auto_flush_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_auto_flush_timeout *cmd = data;
 
@@ -5329,7 +5425,8 @@ static void write_auto_flush_timeout_cmd(const void *data, uint8_t size)
        print_flush_timeout(cmd->timeout);
 }
 
-static void write_auto_flush_timeout_rsp(const void *data, uint8_t size)
+static void write_auto_flush_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_write_auto_flush_timeout *rsp = data;
 
@@ -5337,7 +5434,8 @@ static void write_auto_flush_timeout_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void read_num_broadcast_retrans_rsp(const void *data, uint8_t size)
+static void read_num_broadcast_retrans_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_num_broadcast_retrans *rsp = data;
 
@@ -5345,14 +5443,16 @@ static void read_num_broadcast_retrans_rsp(const void *data, uint8_t size)
        print_num_broadcast_retrans(rsp->num_retrans);
 }
 
-static void write_num_broadcast_retrans_cmd(const void *data, uint8_t size)
+static void write_num_broadcast_retrans_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_num_broadcast_retrans *cmd = data;
 
        print_num_broadcast_retrans(cmd->num_retrans);
 }
 
-static void read_hold_mode_activity_rsp(const void *data, uint8_t size)
+static void read_hold_mode_activity_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_hold_mode_activity *rsp = data;
 
@@ -5360,14 +5460,15 @@ static void read_hold_mode_activity_rsp(const void *data, uint8_t size)
        print_hold_mode_activity(rsp->activity);
 }
 
-static void write_hold_mode_activity_cmd(const void *data, uint8_t size)
+static void write_hold_mode_activity_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_hold_mode_activity *cmd = data;
 
        print_hold_mode_activity(cmd->activity);
 }
 
-static void read_tx_power_cmd(const void *data, uint8_t size)
+static void read_tx_power_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_read_tx_power *cmd = data;
 
@@ -5375,7 +5476,7 @@ static void read_tx_power_cmd(const void *data, uint8_t size)
        print_power_type(cmd->type);
 }
 
-static void read_tx_power_rsp(const void *data, uint8_t size)
+static void read_tx_power_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_tx_power *rsp = data;
 
@@ -5384,7 +5485,8 @@ static void read_tx_power_rsp(const void *data, uint8_t size)
        print_power_level(rsp->level, NULL);
 }
 
-static void read_sync_flow_control_rsp(const void *data, uint8_t size)
+static void read_sync_flow_control_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_sync_flow_control *rsp = data;
 
@@ -5392,21 +5494,23 @@ static void read_sync_flow_control_rsp(const void *data, uint8_t size)
        print_enable("Flow control", rsp->enable);
 }
 
-static void write_sync_flow_control_cmd(const void *data, uint8_t size)
+static void write_sync_flow_control_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_sync_flow_control *cmd = data;
 
        print_enable("Flow control", cmd->enable);
 }
 
-static void set_host_flow_control_cmd(const void *data, uint8_t size)
+static void set_host_flow_control_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_set_host_flow_control *cmd = data;
 
        print_host_flow_control(cmd->enable);
 }
 
-static void host_buffer_size_cmd(const void *data, uint8_t size)
+static void host_buffer_size_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_host_buffer_size *cmd = data;
 
@@ -5418,7 +5522,8 @@ static void host_buffer_size_cmd(const void *data, uint8_t size)
                                        le16_to_cpu(cmd->sco_max_pkt));
 }
 
-static void host_num_completed_packets_cmd(const void *data, uint8_t size)
+static void host_num_completed_packets_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_host_num_completed_packets *cmd = data;
 
@@ -5430,14 +5535,16 @@ static void host_num_completed_packets_cmd(const void *data, uint8_t size)
                packet_hexdump(data + sizeof(*cmd), size - sizeof(*cmd));
 }
 
-static void read_link_supv_timeout_cmd(const void *data, uint8_t size)
+static void read_link_supv_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_link_supv_timeout *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_link_supv_timeout_rsp(const void *data, uint8_t size)
+static void read_link_supv_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_link_supv_timeout *rsp = data;
 
@@ -5446,7 +5553,8 @@ static void read_link_supv_timeout_rsp(const void *data, uint8_t size)
        print_timeout(rsp->timeout);
 }
 
-static void write_link_supv_timeout_cmd(const void *data, uint8_t size)
+static void write_link_supv_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_link_supv_timeout *cmd = data;
 
@@ -5454,7 +5562,8 @@ static void write_link_supv_timeout_cmd(const void *data, uint8_t size)
        print_timeout(cmd->timeout);
 }
 
-static void write_link_supv_timeout_rsp(const void *data, uint8_t size)
+static void write_link_supv_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_write_link_supv_timeout *rsp = data;
 
@@ -5462,7 +5571,8 @@ static void write_link_supv_timeout_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void read_num_supported_iac_rsp(const void *data, uint8_t size)
+static void read_num_supported_iac_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_num_supported_iac *rsp = data;
 
@@ -5470,7 +5580,8 @@ static void read_num_supported_iac_rsp(const void *data, uint8_t size)
        print_field("Number of IAC: %d", rsp->num_iac);
 }
 
-static void read_current_iac_lap_rsp(const void *data, uint8_t size)
+static void read_current_iac_lap_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_current_iac_lap *rsp = data;
        uint8_t i;
@@ -5482,7 +5593,8 @@ static void read_current_iac_lap_rsp(const void *data, uint8_t size)
                print_iac(rsp->iac_lap + (i * 3));
 }
 
-static void write_current_iac_lap_cmd(const void *data, uint8_t size)
+static void write_current_iac_lap_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_current_iac_lap *cmd = data;
        uint8_t i;
@@ -5493,7 +5605,8 @@ static void write_current_iac_lap_cmd(const void *data, uint8_t size)
                print_iac(cmd->iac_lap + (i * 3));
 }
 
-static void read_page_scan_period_mode_rsp(const void *data, uint8_t size)
+static void read_page_scan_period_mode_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_page_scan_period_mode *rsp = data;
 
@@ -5501,14 +5614,16 @@ static void read_page_scan_period_mode_rsp(const void *data, uint8_t size)
        print_pscan_period_mode(rsp->mode);
 }
 
-static void write_page_scan_period_mode_cmd(const void *data, uint8_t size)
+static void write_page_scan_period_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_page_scan_period_mode *cmd = data;
 
        print_pscan_period_mode(cmd->mode);
 }
 
-static void read_page_scan_mode_rsp(const void *data, uint8_t size)
+static void read_page_scan_mode_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_page_scan_mode *rsp = data;
 
@@ -5516,21 +5631,24 @@ static void read_page_scan_mode_rsp(const void *data, uint8_t size)
        print_pscan_mode(rsp->mode);
 }
 
-static void write_page_scan_mode_cmd(const void *data, uint8_t size)
+static void write_page_scan_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_page_scan_mode *cmd = data;
 
        print_pscan_mode(cmd->mode);
 }
 
-static void set_afh_host_classification_cmd(const void *data, uint8_t size)
+static void set_afh_host_classification_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_set_afh_host_classification *cmd = data;
 
        print_channel_map(cmd->map);
 }
 
-static void read_inquiry_scan_type_rsp(const void *data, uint8_t size)
+static void read_inquiry_scan_type_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_inquiry_scan_type *rsp = data;
 
@@ -5538,14 +5656,16 @@ static void read_inquiry_scan_type_rsp(const void *data, uint8_t size)
        print_inquiry_scan_type(rsp->type);
 }
 
-static void write_inquiry_scan_type_cmd(const void *data, uint8_t size)
+static void write_inquiry_scan_type_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_inquiry_scan_type *cmd = data;
 
        print_inquiry_scan_type(cmd->type);
 }
 
-static void read_inquiry_mode_rsp(const void *data, uint8_t size)
+static void read_inquiry_mode_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_inquiry_mode *rsp = data;
 
@@ -5553,14 +5673,16 @@ static void read_inquiry_mode_rsp(const void *data, uint8_t size)
        print_inquiry_mode(rsp->mode);
 }
 
-static void write_inquiry_mode_cmd(const void *data, uint8_t size)
+static void write_inquiry_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_inquiry_mode *cmd = data;
 
        print_inquiry_mode(cmd->mode);
 }
 
-static void read_page_scan_type_rsp(const void *data, uint8_t size)
+static void read_page_scan_type_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_page_scan_type *rsp = data;
 
@@ -5568,14 +5690,16 @@ static void read_page_scan_type_rsp(const void *data, uint8_t size)
        print_pscan_type(rsp->type);
 }
 
-static void write_page_scan_type_cmd(const void *data, uint8_t size)
+static void write_page_scan_type_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_page_scan_type *cmd = data;
 
        print_pscan_type(cmd->type);
 }
 
-static void read_afh_assessment_mode_rsp(const void *data, uint8_t size)
+static void read_afh_assessment_mode_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_afh_assessment_mode *rsp = data;
 
@@ -5583,14 +5707,16 @@ static void read_afh_assessment_mode_rsp(const void *data, uint8_t size)
        print_enable("Mode", rsp->mode);
 }
 
-static void write_afh_assessment_mode_cmd(const void *data, uint8_t size)
+static void write_afh_assessment_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_afh_assessment_mode *cmd = data;
 
        print_enable("Mode", cmd->mode);
 }
 
-static void read_ext_inquiry_response_rsp(const void *data, uint8_t size)
+static void read_ext_inquiry_response_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_ext_inquiry_response *rsp = data;
 
@@ -5599,7 +5725,8 @@ static void read_ext_inquiry_response_rsp(const void *data, uint8_t size)
        print_eir(rsp->data, sizeof(rsp->data), false);
 }
 
-static void write_ext_inquiry_response_cmd(const void *data, uint8_t size)
+static void write_ext_inquiry_response_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_ext_inquiry_response *cmd = data;
 
@@ -5607,14 +5734,16 @@ static void write_ext_inquiry_response_cmd(const void *data, uint8_t size)
        print_eir(cmd->data, sizeof(cmd->data), false);
 }
 
-static void refresh_encrypt_key_cmd(const void *data, uint8_t size)
+static void refresh_encrypt_key_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_refresh_encrypt_key *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_simple_pairing_mode_rsp(const void *data, uint8_t size)
+static void read_simple_pairing_mode_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_simple_pairing_mode *rsp = data;
 
@@ -5622,14 +5751,16 @@ static void read_simple_pairing_mode_rsp(const void *data, uint8_t size)
        print_enable("Mode", rsp->mode);
 }
 
-static void write_simple_pairing_mode_cmd(const void *data, uint8_t size)
+static void write_simple_pairing_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_simple_pairing_mode *cmd = data;
 
        print_enable("Mode", cmd->mode);
 }
 
-static void read_local_oob_data_rsp(const void *data, uint8_t size)
+static void read_local_oob_data_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_oob_data *rsp = data;
 
@@ -5638,7 +5769,8 @@ static void read_local_oob_data_rsp(const void *data, uint8_t size)
        print_randomizer_p192(rsp->randomizer);
 }
 
-static void read_inquiry_resp_tx_power_rsp(const void *data, uint8_t size)
+static void read_inquiry_resp_tx_power_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_inquiry_resp_tx_power *rsp = data;
 
@@ -5646,14 +5778,16 @@ static void read_inquiry_resp_tx_power_rsp(const void *data, uint8_t size)
        print_power_level(rsp->level, NULL);
 }
 
-static void write_inquiry_tx_power_cmd(const void *data, uint8_t size)
+static void write_inquiry_tx_power_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_inquiry_tx_power *cmd = data;
 
        print_power_level(cmd->level, NULL);
 }
 
-static void read_erroneous_reporting_rsp(const void *data, uint8_t size)
+static void read_erroneous_reporting_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_erroneous_reporting *rsp = data;
 
@@ -5661,14 +5795,15 @@ static void read_erroneous_reporting_rsp(const void *data, uint8_t size)
        print_enable("Mode", rsp->mode);
 }
 
-static void write_erroneous_reporting_cmd(const void *data, uint8_t size)
+static void write_erroneous_reporting_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_erroneous_reporting *cmd = data;
 
        print_enable("Mode", cmd->mode);
 }
 
-static void enhanced_flush_cmd(const void *data, uint8_t size)
+static void enhanced_flush_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_enhanced_flush *cmd = data;
        const char *str;
@@ -5687,7 +5822,8 @@ static void enhanced_flush_cmd(const void *data, uint8_t size)
        print_field("Type: %s (0x%2.2x)", str, cmd->type);
 }
 
-static void send_keypress_notify_cmd(const void *data, uint8_t size)
+static void send_keypress_notify_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_send_keypress_notify *cmd = data;
        const char *str;
@@ -5718,7 +5854,8 @@ static void send_keypress_notify_cmd(const void *data, uint8_t size)
        print_field("Type: %s (0x%2.2x)", str, cmd->type);
 }
 
-static void send_keypress_notify_rsp(const void *data, uint8_t size)
+static void send_keypress_notify_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_send_keypress_notify *rsp = data;
 
@@ -5726,14 +5863,16 @@ static void send_keypress_notify_rsp(const void *data, uint8_t size)
        print_bdaddr(rsp->bdaddr);
 }
 
-static void set_event_mask_page2_cmd(const void *data, uint8_t size)
+static void set_event_mask_page2_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_set_event_mask_page2 *cmd = data;
 
        print_event_mask(cmd->mask, events_page2_table);
 }
 
-static void read_location_data_rsp(const void *data, uint8_t size)
+static void read_location_data_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_location_data *rsp = data;
 
@@ -5744,7 +5883,8 @@ static void read_location_data_rsp(const void *data, uint8_t size)
        print_location_options(rsp->options);
 }
 
-static void write_location_data_cmd(const void *data, uint8_t size)
+static void write_location_data_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_location_data *cmd = data;
 
@@ -5754,7 +5894,8 @@ static void write_location_data_cmd(const void *data, uint8_t size)
        print_location_options(cmd->options);
 }
 
-static void read_flow_control_mode_rsp(const void *data, uint8_t size)
+static void read_flow_control_mode_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_flow_control_mode *rsp = data;
 
@@ -5762,14 +5903,16 @@ static void read_flow_control_mode_rsp(const void *data, uint8_t size)
        print_flow_control_mode(rsp->mode);
 }
 
-static void write_flow_control_mode_cmd(const void *data, uint8_t size)
+static void write_flow_control_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_flow_control_mode *cmd = data;
 
        print_flow_control_mode(cmd->mode);
 }
 
-static void read_enhanced_tx_power_cmd(const void *data, uint8_t size)
+static void read_enhanced_tx_power_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_enhanced_tx_power *cmd = data;
 
@@ -5777,7 +5920,8 @@ static void read_enhanced_tx_power_cmd(const void *data, uint8_t size)
        print_power_type(cmd->type);
 }
 
-static void read_enhanced_tx_power_rsp(const void *data, uint8_t size)
+static void read_enhanced_tx_power_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_enhanced_tx_power *rsp = data;
 
@@ -5788,7 +5932,7 @@ static void read_enhanced_tx_power_rsp(const void *data, uint8_t size)
        print_power_level(rsp->level_8dpsk, "8DPSK");
 }
 
-static void short_range_mode_cmd(const void *data, uint8_t size)
+static void short_range_mode_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_short_range_mode *cmd = data;
 
@@ -5796,7 +5940,8 @@ static void short_range_mode_cmd(const void *data, uint8_t size)
        print_enable("Short range mode", cmd->mode);
 }
 
-static void read_le_host_supported_rsp(const void *data, uint8_t size)
+static void read_le_host_supported_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_le_host_supported *rsp = data;
 
@@ -5805,7 +5950,8 @@ static void read_le_host_supported_rsp(const void *data, uint8_t size)
        print_field("Simultaneous: 0x%2.2x", rsp->simultaneous);
 }
 
-static void write_le_host_supported_cmd(const void *data, uint8_t size)
+static void write_le_host_supported_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_le_host_supported *cmd = data;
 
@@ -5813,14 +5959,16 @@ static void write_le_host_supported_cmd(const void *data, uint8_t size)
        print_field("Simultaneous: 0x%2.2x", cmd->simultaneous);
 }
 
-static void set_reserved_lt_addr_cmd(const void *data, uint8_t size)
+static void set_reserved_lt_addr_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_set_reserved_lt_addr *cmd = data;
 
        print_lt_addr(cmd->lt_addr);
 }
 
-static void set_reserved_lt_addr_rsp(const void *data, uint8_t size)
+static void set_reserved_lt_addr_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_set_reserved_lt_addr *rsp = data;
 
@@ -5828,14 +5976,16 @@ static void set_reserved_lt_addr_rsp(const void *data, uint8_t size)
        print_lt_addr(rsp->lt_addr);
 }
 
-static void delete_reserved_lt_addr_cmd(const void *data, uint8_t size)
+static void delete_reserved_lt_addr_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_delete_reserved_lt_addr *cmd = data;
 
        print_lt_addr(cmd->lt_addr);
 }
 
-static void delete_reserved_lt_addr_rsp(const void *data, uint8_t size)
+static void delete_reserved_lt_addr_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_delete_reserved_lt_addr *rsp = data;
 
@@ -5843,7 +5993,8 @@ static void delete_reserved_lt_addr_rsp(const void *data, uint8_t size)
        print_lt_addr(rsp->lt_addr);
 }
 
-static void set_peripheral_broadcast_data_cmd(const void *data, uint8_t size)
+static void set_peripheral_broadcast_data_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_set_peripheral_broadcast_data *cmd = data;
 
@@ -5858,7 +6009,8 @@ static void set_peripheral_broadcast_data_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 3, size - 3);
 }
 
-static void set_peripheral_broadcast_data_rsp(const void *data, uint8_t size)
+static void set_peripheral_broadcast_data_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_set_peripheral_broadcast_data *rsp = data;
 
@@ -5866,7 +6018,8 @@ static void set_peripheral_broadcast_data_rsp(const void *data, uint8_t size)
        print_lt_addr(rsp->lt_addr);
 }
 
-static void read_sync_train_params_rsp(const void *data, uint8_t size)
+static void read_sync_train_params_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_sync_train_params *rsp = data;
 
@@ -5878,7 +6031,8 @@ static void read_sync_train_params_rsp(const void *data, uint8_t size)
        print_field("Service data: 0x%2.2x", rsp->service_data);
 }
 
-static void write_sync_train_params_cmd(const void *data, uint8_t size)
+static void write_sync_train_params_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_sync_train_params *cmd = data;
 
@@ -5890,7 +6044,8 @@ static void write_sync_train_params_cmd(const void *data, uint8_t size)
        print_field("Service data: 0x%2.2x", cmd->service_data);
 }
 
-static void write_sync_train_params_rsp(const void *data, uint8_t size)
+static void write_sync_train_params_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_write_sync_train_params *rsp = data;
 
@@ -5898,7 +6053,8 @@ static void write_sync_train_params_rsp(const void *data, uint8_t size)
        print_interval(rsp->interval);
 }
 
-static void read_secure_conn_support_rsp(const void *data, uint8_t size)
+static void read_secure_conn_support_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_secure_conn_support *rsp = data;
 
@@ -5906,21 +6062,24 @@ static void read_secure_conn_support_rsp(const void *data, uint8_t size)
        print_enable("Support", rsp->support);
 }
 
-static void write_secure_conn_support_cmd(const void *data, uint8_t size)
+static void write_secure_conn_support_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_secure_conn_support *cmd = data;
 
        print_enable("Support", cmd->support);
 }
 
-static void read_auth_payload_timeout_cmd(const void *data, uint8_t size)
+static void read_auth_payload_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_auth_payload_timeout *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_auth_payload_timeout_rsp(const void *data, uint8_t size)
+static void read_auth_payload_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_auth_payload_timeout *rsp = data;
 
@@ -5929,7 +6088,8 @@ static void read_auth_payload_timeout_rsp(const void *data, uint8_t size)
        print_auth_payload_timeout(rsp->timeout);
 }
 
-static void write_auth_payload_timeout_cmd(const void *data, uint8_t size)
+static void write_auth_payload_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_auth_payload_timeout *cmd = data;
 
@@ -5937,7 +6097,8 @@ static void write_auth_payload_timeout_cmd(const void *data, uint8_t size)
        print_auth_payload_timeout(cmd->timeout);
 }
 
-static void write_auth_payload_timeout_rsp(const void *data, uint8_t size)
+static void write_auth_payload_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_write_auth_payload_timeout *rsp = data;
 
@@ -5945,7 +6106,8 @@ static void write_auth_payload_timeout_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void read_local_oob_ext_data_rsp(const void *data, uint8_t size)
+static void read_local_oob_ext_data_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_oob_ext_data *rsp = data;
 
@@ -5956,7 +6118,8 @@ static void read_local_oob_ext_data_rsp(const void *data, uint8_t size)
        print_randomizer_p256(rsp->randomizer256);
 }
 
-static void read_ext_page_timeout_rsp(const void *data, uint8_t size)
+static void read_ext_page_timeout_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_ext_page_timeout *rsp = data;
 
@@ -5964,14 +6127,16 @@ static void read_ext_page_timeout_rsp(const void *data, uint8_t size)
        print_timeout(rsp->timeout);
 }
 
-static void write_ext_page_timeout_cmd(const void *data, uint8_t size)
+static void write_ext_page_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_ext_page_timeout *cmd = data;
 
        print_timeout(cmd->timeout);
 }
 
-static void read_ext_inquiry_length_rsp(const void *data, uint8_t size)
+static void read_ext_inquiry_length_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_ext_inquiry_length *rsp = data;
 
@@ -5979,14 +6144,16 @@ static void read_ext_inquiry_length_rsp(const void *data, uint8_t size)
        print_interval(rsp->interval);
 }
 
-static void write_ext_inquiry_length_cmd(const void *data, uint8_t size)
+static void write_ext_inquiry_length_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_ext_inquiry_length *cmd = data;
 
        print_interval(cmd->interval);
 }
 
-static void read_local_version_rsp(const void *data, uint8_t size)
+static void read_local_version_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_version *rsp = data;
        uint16_t manufacturer;
@@ -6018,7 +6185,8 @@ static void read_local_version_rsp(const void *data, uint8_t size)
        }
 }
 
-static void read_local_commands_rsp(const void *data, uint8_t size)
+static void read_local_commands_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_commands *rsp = data;
 
@@ -6026,7 +6194,8 @@ static void read_local_commands_rsp(const void *data, uint8_t size)
        print_commands(rsp->commands);
 }
 
-static void read_local_features_rsp(const void *data, uint8_t size)
+static void read_local_features_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_features *rsp = data;
 
@@ -6034,14 +6203,16 @@ static void read_local_features_rsp(const void *data, uint8_t size)
        print_features(0, rsp->features, 0x00);
 }
 
-static void read_local_ext_features_cmd(const void *data, uint8_t size)
+static void read_local_ext_features_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_local_ext_features *cmd = data;
 
        print_field("Page: %d", cmd->page);
 }
 
-static void read_local_ext_features_rsp(const void *data, uint8_t size)
+static void read_local_ext_features_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_ext_features *rsp = data;
 
@@ -6050,7 +6221,7 @@ static void read_local_ext_features_rsp(const void *data, uint8_t size)
        print_features(rsp->page, rsp->features, 0x00);
 }
 
-static void read_buffer_size_rsp(const void *data, uint8_t size)
+static void read_buffer_size_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_buffer_size *rsp = data;
 
@@ -6063,7 +6234,8 @@ static void read_buffer_size_rsp(const void *data, uint8_t size)
                                        le16_to_cpu(rsp->sco_max_pkt));
 }
 
-static void read_country_code_rsp(const void *data, uint8_t size)
+static void read_country_code_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_country_code *rsp = data;
        const char *str;
@@ -6085,7 +6257,7 @@ static void read_country_code_rsp(const void *data, uint8_t size)
        print_field("Country code: %s (0x%2.2x)", str, rsp->code);
 }
 
-static void read_bd_addr_rsp(const void *data, uint8_t size)
+static void read_bd_addr_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_bd_addr *rsp = data;
 
@@ -6096,7 +6268,8 @@ static void read_bd_addr_rsp(const void *data, uint8_t size)
                memcpy(index_list[index_current].bdaddr, rsp->bdaddr, 6);
 }
 
-static void read_data_block_size_rsp(const void *data, uint8_t size)
+static void read_data_block_size_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_data_block_size *rsp = data;
 
@@ -6106,7 +6279,8 @@ static void read_data_block_size_rsp(const void *data, uint8_t size)
        print_field("Num blocks: %d", le16_to_cpu(rsp->num_blocks));
 }
 
-static void read_local_codecs_rsp(const void *data, uint8_t size)
+static void read_local_codecs_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_codecs *rsp = data;
        uint8_t i, num_vnd_codecs;
@@ -6156,7 +6330,8 @@ static void print_list(const void *data, uint8_t size, int num_items,
                print_hex_field("", data, size);
 }
 
-static void read_local_codecs_rsp_v2(const void *data, uint8_t size)
+static void read_local_codecs_rsp_v2(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_codecs_v2 *rsp = data;
        uint8_t num_vnd_codecs;
@@ -6230,7 +6405,8 @@ static void print_vnd_codec(const char *label,
                                "  Unknown transport (0x%2.2x)", mask);
 }
 
-static void read_local_codec_caps_cmd(const void *data, uint8_t size)
+static void read_local_codec_caps_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_local_codec_caps *cmd = data;
 
@@ -6238,7 +6414,8 @@ static void read_local_codec_caps_cmd(const void *data, uint8_t size)
        print_path_direction("Direction", cmd->dir);
 }
 
-static void read_local_codec_caps_rsp(const void *data, uint8_t size)
+static void read_local_codec_caps_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_codec_caps *rsp = data;
        uint8_t i;
@@ -6266,7 +6443,8 @@ static void read_local_codec_caps_rsp(const void *data, uint8_t size)
        }
 }
 
-static void read_local_ctrl_delay_cmd(const void *data, uint8_t size)
+static void read_local_ctrl_delay_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_local_ctrl_delay *cmd = data;
 
@@ -6275,7 +6453,7 @@ static void read_local_ctrl_delay_cmd(const void *data, uint8_t size)
        print_field("Length Codec Configuration: %u", cmd->codec_cfg_len);
 }
 
-static void config_data_path_cmd(const void *data, uint8_t size)
+static void config_data_path_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_config_data_path *cmd = data;
 
@@ -6295,7 +6473,8 @@ static void print_usec_interval(const char *prefix, const uint8_t interval[3])
                                                le32_to_cpu(u24));
 }
 
-static void read_local_ctrl_delay_rsp(const void *data, uint8_t size)
+static void read_local_ctrl_delay_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_ctrl_delay *rsp = data;
 
@@ -6304,7 +6483,8 @@ static void read_local_ctrl_delay_rsp(const void *data, uint8_t size)
        print_usec_interval("Maximum Controller delay", rsp->max_delay);
 }
 
-static void read_local_pairing_options_rsp(const void *data, uint8_t size)
+static void read_local_pairing_options_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_pairing_options *rsp = data;
 
@@ -6313,14 +6493,16 @@ static void read_local_pairing_options_rsp(const void *data, uint8_t size)
        print_field("Max encryption key size: %u octets", rsp->max_key_size);
 }
 
-static void read_failed_contact_counter_cmd(const void *data, uint8_t size)
+static void read_failed_contact_counter_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_failed_contact_counter *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_failed_contact_counter_rsp(const void *data, uint8_t size)
+static void read_failed_contact_counter_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_failed_contact_counter *rsp = data;
 
@@ -6329,14 +6511,16 @@ static void read_failed_contact_counter_rsp(const void *data, uint8_t size)
        print_field("Counter: %u", le16_to_cpu(rsp->counter));
 }
 
-static void reset_failed_contact_counter_cmd(const void *data, uint8_t size)
+static void reset_failed_contact_counter_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_reset_failed_contact_counter *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void reset_failed_contact_counter_rsp(const void *data, uint8_t size)
+static void reset_failed_contact_counter_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_reset_failed_contact_counter *rsp = data;
 
@@ -6344,14 +6528,16 @@ static void reset_failed_contact_counter_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void read_link_quality_cmd(const void *data, uint8_t size)
+static void read_link_quality_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_link_quality *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_link_quality_rsp(const void *data, uint8_t size)
+static void read_link_quality_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_link_quality *rsp = data;
 
@@ -6360,14 +6546,14 @@ static void read_link_quality_rsp(const void *data, uint8_t size)
        print_field("Link quality: 0x%2.2x", rsp->link_quality);
 }
 
-static void read_rssi_cmd(const void *data, uint8_t size)
+static void read_rssi_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_read_rssi *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_rssi_rsp(const void *data, uint8_t size)
+static void read_rssi_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_rssi *rsp = data;
 
@@ -6376,14 +6562,16 @@ static void read_rssi_rsp(const void *data, uint8_t size)
        print_rssi(rsp->rssi);
 }
 
-static void read_afh_channel_map_cmd(const void *data, uint8_t size)
+static void read_afh_channel_map_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_afh_channel_map *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_afh_channel_map_rsp(const void *data, uint8_t size)
+static void read_afh_channel_map_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_afh_channel_map *rsp = data;
 
@@ -6393,7 +6581,7 @@ static void read_afh_channel_map_rsp(const void *data, uint8_t size)
        print_channel_map(rsp->map);
 }
 
-static void read_clock_cmd(const void *data, uint8_t size)
+static void read_clock_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_read_clock *cmd = data;
 
@@ -6401,7 +6589,7 @@ static void read_clock_cmd(const void *data, uint8_t size)
        print_clock_type(cmd->type);
 }
 
-static void read_clock_rsp(const void *data, uint8_t size)
+static void read_clock_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_read_clock *rsp = data;
 
@@ -6411,14 +6599,16 @@ static void read_clock_rsp(const void *data, uint8_t size)
        print_clock_accuracy(rsp->accuracy);
 }
 
-static void read_encrypt_key_size_cmd(const void *data, uint8_t size)
+static void read_encrypt_key_size_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_encrypt_key_size *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void read_encrypt_key_size_rsp(const void *data, uint8_t size)
+static void read_encrypt_key_size_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_encrypt_key_size *rsp = data;
 
@@ -6427,7 +6617,8 @@ static void read_encrypt_key_size_rsp(const void *data, uint8_t size)
        print_key_size(rsp->key_size);
 }
 
-static void read_local_amp_info_rsp(const void *data, uint8_t size)
+static void read_local_amp_info_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_amp_info *rsp = data;
        const char *str;
@@ -6462,7 +6653,8 @@ static void read_local_amp_info_rsp(const void *data, uint8_t size)
                                        le32_to_cpu(rsp->be_flush_to));
 }
 
-static void read_local_amp_assoc_cmd(const void *data, uint8_t size)
+static void read_local_amp_assoc_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_read_local_amp_assoc *cmd = data;
 
@@ -6471,7 +6663,8 @@ static void read_local_amp_assoc_cmd(const void *data, uint8_t size)
        print_field("Max ASSOC length: %d", le16_to_cpu(cmd->max_assoc_len));
 }
 
-static void read_local_amp_assoc_rsp(const void *data, uint8_t size)
+static void read_local_amp_assoc_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_local_amp_assoc *rsp = data;
 
@@ -6483,7 +6676,8 @@ static void read_local_amp_assoc_rsp(const void *data, uint8_t size)
        packet_hexdump(data + 4, size - 4);
 }
 
-static void write_remote_amp_assoc_cmd(const void *data, uint8_t size)
+static void write_remote_amp_assoc_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_remote_amp_assoc *cmd = data;
 
@@ -6495,7 +6689,8 @@ static void write_remote_amp_assoc_cmd(const void *data, uint8_t size)
        packet_hexdump(data + 5, size - 5);
 }
 
-static void write_remote_amp_assoc_rsp(const void *data, uint8_t size)
+static void write_remote_amp_assoc_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_write_remote_amp_assoc *rsp = data;
 
@@ -6503,7 +6698,8 @@ static void write_remote_amp_assoc_rsp(const void *data, uint8_t size)
        print_phy_handle(rsp->phy_handle);
 }
 
-static void get_mws_transport_config_rsp(const void *data, uint8_t size)
+static void get_mws_transport_config_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_get_mws_transport_config *rsp = data;
        uint8_t sum_baud_rates = 0;
@@ -6558,7 +6754,8 @@ static void get_mws_transport_config_rsp(const void *data, uint8_t size)
                size - 2 - rsp->num_transports * 2 - sum_baud_rates * 8);
 }
 
-static void set_triggered_clock_capture_cmd(const void *data, uint8_t size)
+static void set_triggered_clock_capture_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_set_triggered_clock_capture *cmd = data;
 
@@ -6569,7 +6766,8 @@ static void set_triggered_clock_capture_cmd(const void *data, uint8_t size)
        print_field("Clock captures to filter: %u", cmd->num_filter);
 }
 
-static void read_loopback_mode_rsp(const void *data, uint8_t size)
+static void read_loopback_mode_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_read_loopback_mode *rsp = data;
 
@@ -6577,28 +6775,32 @@ static void read_loopback_mode_rsp(const void *data, uint8_t size)
        print_loopback_mode(rsp->mode);
 }
 
-static void write_loopback_mode_cmd(const void *data, uint8_t size)
+static void write_loopback_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_loopback_mode *cmd = data;
 
        print_loopback_mode(cmd->mode);
 }
 
-static void write_ssp_debug_mode_cmd(const void *data, uint8_t size)
+static void write_ssp_debug_mode_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_write_ssp_debug_mode *cmd = data;
 
        print_enable("Debug Mode", cmd->mode);
 }
 
-static void le_set_event_mask_cmd(const void *data, uint8_t size)
+static void le_set_event_mask_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_event_mask *cmd = data;
 
        print_event_mask(cmd->mask, events_le_table);
 }
 
-static void le_read_buffer_size_rsp(const void *data, uint8_t size)
+static void le_read_buffer_size_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_buffer_size *rsp = data;
 
@@ -6607,7 +6809,8 @@ static void le_read_buffer_size_rsp(const void *data, uint8_t size)
        print_field("Num data packets: %d", rsp->le_max_pkt);
 }
 
-static void le_read_local_features_rsp(const void *data, uint8_t size)
+static void le_read_local_features_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_local_features *rsp = data;
 
@@ -6615,14 +6818,16 @@ static void le_read_local_features_rsp(const void *data, uint8_t size)
        print_features(0, rsp->features, 0x01);
 }
 
-static void le_set_random_address_cmd(const void *data, uint8_t size)
+static void le_set_random_address_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_random_address *cmd = data;
 
        print_addr("Address", cmd->addr, 0x01);
 }
 
-static void le_set_adv_parameters_cmd(const void *data, uint8_t size)
+static void le_set_adv_parameters_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_adv_parameters *cmd = data;
        const char *str;
@@ -6660,7 +6865,8 @@ static void le_set_adv_parameters_cmd(const void *data, uint8_t size)
        print_adv_filter_policy("Filter policy", cmd->filter_policy);
 }
 
-static void le_read_adv_tx_power_rsp(const void *data, uint8_t size)
+static void le_read_adv_tx_power_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_adv_tx_power *rsp = data;
 
@@ -6668,7 +6874,7 @@ static void le_read_adv_tx_power_rsp(const void *data, uint8_t size)
        print_power_level(rsp->level, NULL);
 }
 
-static void le_set_adv_data_cmd(const void *data, uint8_t size)
+static void le_set_adv_data_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_set_adv_data *cmd = data;
 
@@ -6676,7 +6882,8 @@ static void le_set_adv_data_cmd(const void *data, uint8_t size)
        print_eir(cmd->data, cmd->len, true);
 }
 
-static void le_set_scan_rsp_data_cmd(const void *data, uint8_t size)
+static void le_set_scan_rsp_data_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_scan_rsp_data *cmd = data;
 
@@ -6684,7 +6891,8 @@ static void le_set_scan_rsp_data_cmd(const void *data, uint8_t size)
        print_eir(cmd->data, cmd->len, true);
 }
 
-static void le_set_adv_enable_cmd(const void *data, uint8_t size)
+static void le_set_adv_enable_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_adv_enable *cmd = data;
 
@@ -6735,7 +6943,8 @@ static void print_scan_filter_policy(uint8_t policy)
        print_field("Filter policy: %s (0x%2.2x)", str, policy);
 }
 
-static void le_set_scan_parameters_cmd(const void *data, uint8_t size)
+static void le_set_scan_parameters_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_scan_parameters *cmd = data;
 
@@ -6746,7 +6955,8 @@ static void le_set_scan_parameters_cmd(const void *data, uint8_t size)
        print_scan_filter_policy(cmd->filter_policy);
 }
 
-static void le_set_scan_enable_cmd(const void *data, uint8_t size)
+static void le_set_scan_enable_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_scan_enable *cmd = data;
 
@@ -6754,7 +6964,7 @@ static void le_set_scan_enable_cmd(const void *data, uint8_t size)
        print_enable("Filter duplicates", cmd->filter_dup);
 }
 
-static void le_create_conn_cmd(const void *data, uint8_t size)
+static void le_create_conn_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_create_conn *cmd = data;
        const char *str;
@@ -6790,7 +7000,8 @@ static void le_create_conn_cmd(const void *data, uint8_t size)
        print_slot_625("Max connection length", cmd->max_length);
 }
 
-static void le_read_accept_list_size_rsp(const void *data, uint8_t size)
+static void le_read_accept_list_size_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_accept_list_size *rsp = data;
 
@@ -6798,7 +7009,8 @@ static void le_read_accept_list_size_rsp(const void *data, uint8_t size)
        print_field("Size: %u", rsp->size);
 }
 
-static void le_add_to_accept_list_cmd(const void *data, uint8_t size)
+static void le_add_to_accept_list_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_add_to_accept_list *cmd = data;
 
@@ -6806,7 +7018,8 @@ static void le_add_to_accept_list_cmd(const void *data, uint8_t size)
        print_addr("Address", cmd->addr, cmd->addr_type);
 }
 
-static void le_remove_from_accept_list_cmd(const void *data, uint8_t size)
+static void le_remove_from_accept_list_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_remove_from_accept_list *cmd = data;
 
@@ -6814,7 +7027,7 @@ static void le_remove_from_accept_list_cmd(const void *data, uint8_t size)
        print_addr("Address", cmd->addr, cmd->addr_type);
 }
 
-static void le_conn_update_cmd(const void *data, uint8_t size)
+static void le_conn_update_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_conn_update *cmd = data;
 
@@ -6829,21 +7042,24 @@ static void le_conn_update_cmd(const void *data, uint8_t size)
        print_slot_625("Max connection length", cmd->max_length);
 }
 
-static void le_set_host_classification_cmd(const void *data, uint8_t size)
+static void le_set_host_classification_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_host_classification *cmd = data;
 
        print_le_channel_map(cmd->map);
 }
 
-static void le_read_channel_map_cmd(const void *data, uint8_t size)
+static void le_read_channel_map_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_read_channel_map *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void le_read_channel_map_rsp(const void *data, uint8_t size)
+static void le_read_channel_map_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_channel_map *rsp = data;
 
@@ -6852,14 +7068,15 @@ static void le_read_channel_map_rsp(const void *data, uint8_t size)
        print_le_channel_map(rsp->map);
 }
 
-static void le_read_remote_features_cmd(const void *data, uint8_t size)
+static void le_read_remote_features_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_read_remote_features *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void le_encrypt_cmd(const void *data, uint8_t size)
+static void le_encrypt_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_encrypt *cmd = data;
 
@@ -6867,7 +7084,7 @@ static void le_encrypt_cmd(const void *data, uint8_t size)
        print_key("Plaintext data", cmd->plaintext);
 }
 
-static void le_encrypt_rsp(const void *data, uint8_t size)
+static void le_encrypt_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_le_encrypt *rsp = data;
 
@@ -6875,7 +7092,7 @@ static void le_encrypt_rsp(const void *data, uint8_t size)
        print_key("Encrypted data", rsp->data);
 }
 
-static void le_rand_rsp(const void *data, uint8_t size)
+static void le_rand_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_le_rand *rsp = data;
 
@@ -6883,7 +7100,7 @@ static void le_rand_rsp(const void *data, uint8_t size)
        print_random_number(rsp->number);
 }
 
-static void le_start_encrypt_cmd(const void *data, uint8_t size)
+static void le_start_encrypt_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_start_encrypt *cmd = data;
 
@@ -6893,7 +7110,7 @@ static void le_start_encrypt_cmd(const void *data, uint8_t size)
        print_key("Long term key", cmd->ltk);
 }
 
-static void le_ltk_req_reply_cmd(const void *data, uint8_t size)
+static void le_ltk_req_reply_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_ltk_req_reply *cmd = data;
 
@@ -6901,7 +7118,7 @@ static void le_ltk_req_reply_cmd(const void *data, uint8_t size)
        print_key("Long term key", cmd->ltk);
 }
 
-static void le_ltk_req_reply_rsp(const void *data, uint8_t size)
+static void le_ltk_req_reply_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_le_ltk_req_reply *rsp = data;
 
@@ -6909,14 +7126,16 @@ static void le_ltk_req_reply_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void le_ltk_req_neg_reply_cmd(const void *data, uint8_t size)
+static void le_ltk_req_neg_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_ltk_req_neg_reply *cmd = data;
 
        print_handle(cmd->handle);
 }
 
-static void le_ltk_req_neg_reply_rsp(const void *data, uint8_t size)
+static void le_ltk_req_neg_reply_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_ltk_req_neg_reply *rsp = data;
 
@@ -6924,7 +7143,8 @@ static void le_ltk_req_neg_reply_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void le_read_supported_states_rsp(const void *data, uint8_t size)
+static void le_read_supported_states_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_supported_states *rsp = data;
 
@@ -6932,7 +7152,7 @@ static void le_read_supported_states_rsp(const void *data, uint8_t size)
        print_le_states(rsp->states);
 }
 
-static void le_receiver_test_cmd(const void *data, uint8_t size)
+static void le_receiver_test_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_receiver_test *cmd = data;
 
@@ -6940,7 +7160,8 @@ static void le_receiver_test_cmd(const void *data, uint8_t size)
                                (cmd->frequency * 2) + 2402, cmd->frequency);
 }
 
-static void le_transmitter_test_cmd(const void *data, uint8_t size)
+static void le_transmitter_test_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_transmitter_test *cmd = data;
 
@@ -6950,7 +7171,7 @@ static void le_transmitter_test_cmd(const void *data, uint8_t size)
        print_field("Packet payload: 0x%2.2x", cmd->payload);
 }
 
-static void le_test_end_rsp(const void *data, uint8_t size)
+static void le_test_end_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_le_test_end *rsp = data;
 
@@ -6958,7 +7179,8 @@ static void le_test_end_rsp(const void *data, uint8_t size)
        print_field("Number of packets: %d", le16_to_cpu(rsp->num_packets));
 }
 
-static void le_conn_param_req_reply_cmd(const void *data, uint8_t size)
+static void le_conn_param_req_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_conn_param_req_reply *cmd = data;
 
@@ -6973,7 +7195,8 @@ static void le_conn_param_req_reply_cmd(const void *data, uint8_t size)
        print_slot_625("Max connection length", cmd->max_length);
 }
 
-static void le_conn_param_req_reply_rsp(const void *data, uint8_t size)
+static void le_conn_param_req_reply_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_conn_param_req_reply *rsp = data;
 
@@ -6981,7 +7204,8 @@ static void le_conn_param_req_reply_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void le_conn_param_req_neg_reply_cmd(const void *data, uint8_t size)
+static void le_conn_param_req_neg_reply_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_conn_param_req_neg_reply *cmd = data;
 
@@ -6989,7 +7213,8 @@ static void le_conn_param_req_neg_reply_cmd(const void *data, uint8_t size)
        print_reason(cmd->reason);
 }
 
-static void le_conn_param_req_neg_reply_rsp(const void *data, uint8_t size)
+static void le_conn_param_req_neg_reply_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_conn_param_req_neg_reply *rsp = data;
 
@@ -6997,7 +7222,8 @@ static void le_conn_param_req_neg_reply_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void le_set_data_length_cmd(const void *data, uint8_t size)
+static void le_set_data_length_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_data_length *cmd = data;
 
@@ -7006,7 +7232,8 @@ static void le_set_data_length_cmd(const void *data, uint8_t size)
        print_field("TX time: %d", le16_to_cpu(cmd->tx_time));
 }
 
-static void le_set_data_length_rsp(const void *data, uint8_t size)
+static void le_set_data_length_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_set_data_length *rsp = data;
 
@@ -7014,7 +7241,8 @@ static void le_set_data_length_rsp(const void *data, uint8_t size)
        print_handle(rsp->handle);
 }
 
-static void le_read_default_data_length_rsp(const void *data, uint8_t size)
+static void le_read_default_data_length_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_default_data_length *rsp = data;
 
@@ -7023,7 +7251,8 @@ static void le_read_default_data_length_rsp(const void *data, uint8_t size)
        print_field("TX time: %d", le16_to_cpu(rsp->tx_time));
 }
 
-static void le_write_default_data_length_cmd(const void *data, uint8_t size)
+static void le_write_default_data_length_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_write_default_data_length *cmd = data;
 
@@ -7031,14 +7260,16 @@ static void le_write_default_data_length_cmd(const void *data, uint8_t size)
        print_field("TX time: %d", le16_to_cpu(cmd->tx_time));
 }
 
-static void le_generate_dhkey_cmd(const void *data, uint8_t size)
+static void le_generate_dhkey_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_generate_dhkey *cmd = data;
 
        print_pk256("Remote P-256 public key", cmd->remote_pk256);
 }
 
-static void le_add_to_resolv_list_cmd(const void *data, uint8_t size)
+static void le_add_to_resolv_list_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_add_to_resolv_list *cmd = data;
 
@@ -7048,7 +7279,8 @@ static void le_add_to_resolv_list_cmd(const void *data, uint8_t size)
        print_key("Local identity resolving key", cmd->local_irk);
 }
 
-static void le_remove_from_resolv_list_cmd(const void *data, uint8_t size)
+static void le_remove_from_resolv_list_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_remove_from_resolv_list *cmd = data;
 
@@ -7056,7 +7288,8 @@ static void le_remove_from_resolv_list_cmd(const void *data, uint8_t size)
        print_addr("Address", cmd->addr, cmd->addr_type);
 }
 
-static void le_read_resolv_list_size_rsp(const void *data, uint8_t size)
+static void le_read_resolv_list_size_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_resolv_list_size *rsp = data;
 
@@ -7064,7 +7297,8 @@ static void le_read_resolv_list_size_rsp(const void *data, uint8_t size)
        print_field("Size: %u", rsp->size);
 }
 
-static void le_read_peer_resolv_addr_cmd(const void *data, uint8_t size)
+static void le_read_peer_resolv_addr_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_read_peer_resolv_addr *cmd = data;
 
@@ -7072,7 +7306,8 @@ static void le_read_peer_resolv_addr_cmd(const void *data, uint8_t size)
        print_addr("Address", cmd->addr, cmd->addr_type);
 }
 
-static void le_read_peer_resolv_addr_rsp(const void *data, uint8_t size)
+static void le_read_peer_resolv_addr_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_peer_resolv_addr *rsp = data;
 
@@ -7080,7 +7315,8 @@ static void le_read_peer_resolv_addr_rsp(const void *data, uint8_t size)
        print_addr("Address", rsp->addr, 0x01);
 }
 
-static void le_read_local_resolv_addr_cmd(const void *data, uint8_t size)
+static void le_read_local_resolv_addr_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_read_local_resolv_addr *cmd = data;
 
@@ -7088,7 +7324,8 @@ static void le_read_local_resolv_addr_cmd(const void *data, uint8_t size)
        print_addr("Address", cmd->addr, cmd->addr_type);
 }
 
-static void le_read_local_resolv_addr_rsp(const void *data, uint8_t size)
+static void le_read_local_resolv_addr_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_local_resolv_addr *rsp = data;
 
@@ -7096,21 +7333,24 @@ static void le_read_local_resolv_addr_rsp(const void *data, uint8_t size)
        print_addr("Address", rsp->addr, 0x01);
 }
 
-static void le_set_resolv_enable_cmd(const void *data, uint8_t size)
+static void le_set_resolv_enable_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_resolv_enable *cmd = data;
 
        print_enable("Address resolution", cmd->enable);
 }
 
-static void le_set_resolv_timeout_cmd(const void *data, uint8_t size)
+static void le_set_resolv_timeout_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_resolv_timeout *cmd = data;
 
        print_field("Timeout: %u seconds", le16_to_cpu(cmd->timeout));
 }
 
-static void le_read_max_data_length_rsp(const void *data, uint8_t size)
+static void le_read_max_data_length_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_max_data_length *rsp = data;
 
@@ -7121,7 +7361,7 @@ static void le_read_max_data_length_rsp(const void *data, uint8_t size)
        print_field("Max RX time: %d", le16_to_cpu(rsp->max_rx_time));
 }
 
-static void le_read_phy_cmd(const void *data, uint8_t size)
+static void le_read_phy_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_read_phy *cmd = data;
 
@@ -7150,7 +7390,7 @@ static void print_le_phy(const char *prefix, uint8_t phy)
        print_field("%s: %s (0x%2.2x)", prefix, str, phy);
 }
 
-static void le_read_phy_rsp(const void *data, uint8_t size)
+static void le_read_phy_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_le_read_phy *rsp = data;
 
@@ -7202,14 +7442,15 @@ static void print_le_phys_preference(uint8_t all_phys, uint8_t tx_phys,
                                                        " (0x%2.2x)", mask);
 }
 
-static void le_set_default_phy_cmd(const void *data, uint8_t size)
+static void le_set_default_phy_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_default_phy *cmd = data;
 
        print_le_phys_preference(cmd->all_phys, cmd->tx_phys, cmd->rx_phys);
 }
 
-static void le_set_phy_cmd(const void *data, uint8_t size)
+static void le_set_phy_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_set_phy *cmd = data;
        const char *str;
@@ -7231,7 +7472,8 @@ static void le_set_phy_cmd(const void *data, uint8_t size)
        print_field("PHY options preference: %s (0x%4.4x)", str, cmd->phy_opts);
 }
 
-static void le_enhanced_receiver_test_cmd(const void *data, uint8_t size)
+static void le_enhanced_receiver_test_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_enhanced_receiver_test *cmd = data;
        const char *str;
@@ -7256,7 +7498,8 @@ static void le_enhanced_receiver_test_cmd(const void *data, uint8_t size)
                                                        cmd->modulation_index);
 }
 
-static void le_enhanced_transmitter_test_cmd(const void *data, uint8_t size)
+static void le_enhanced_transmitter_test_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_enhanced_transmitter_test *cmd = data;
        const char *str;
@@ -7287,7 +7530,8 @@ static void le_enhanced_transmitter_test_cmd(const void *data, uint8_t size)
        print_field("PHY: %s (0x%2.2x)", str, cmd->phy);
 }
 
-static void le_set_adv_set_rand_addr(const void *data, uint8_t size)
+static void le_set_adv_set_rand_addr(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_adv_set_rand_addr *cmd = data;
 
@@ -7373,7 +7617,8 @@ static void print_ext_slot_625(const char *label, const uint8_t value[3])
                                                value_cpu * 0.625, value_cpu);
 }
 
-static void le_set_ext_adv_params_cmd(const void *data, uint8_t size)
+static void le_set_ext_adv_params_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_ext_adv_params *cmd = data;
        const char *str;
@@ -7412,7 +7657,8 @@ static void le_set_ext_adv_params_cmd(const void *data, uint8_t size)
        print_enable("Scan request notifications", cmd->notif_enable);
 }
 
-static void le_set_ext_adv_params_rsp(const void *data, uint8_t size)
+static void le_set_ext_adv_params_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_set_ext_adv_params *rsp = data;
 
@@ -7420,7 +7666,8 @@ static void le_set_ext_adv_params_rsp(const void *data, uint8_t size)
        print_power_level(rsp->tx_power, "selected");
 }
 
-static void le_set_ext_adv_data_cmd(const void *data, uint8_t size)
+static void le_set_ext_adv_data_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_ext_adv_data *cmd = data;
        const char *str;
@@ -7468,7 +7715,8 @@ static void le_set_ext_adv_data_cmd(const void *data, uint8_t size)
        packet_print_ad(cmd->data, size - sizeof(*cmd));
 }
 
-static void le_set_ext_scan_rsp_data_cmd(const void *data, uint8_t size)
+static void le_set_ext_scan_rsp_data_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_ext_scan_rsp_data *cmd = data;
        const char *str;
@@ -7516,7 +7764,8 @@ static void le_set_ext_scan_rsp_data_cmd(const void *data, uint8_t size)
        packet_print_ad(cmd->data, size - sizeof(*cmd));
 }
 
-static void le_set_ext_adv_enable_cmd(const void *data, uint8_t size)
+static void le_set_ext_adv_enable_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_ext_adv_enable *cmd = data;
        const struct bt_hci_cmd_ext_adv_set *adv_set;
@@ -7544,7 +7793,8 @@ static void le_set_ext_adv_enable_cmd(const void *data, uint8_t size)
        }
 }
 
-static void le_read_max_adv_data_len_rsp(const void *data, uint8_t size)
+static void le_read_max_adv_data_len_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_max_adv_data_len *rsp = data;
 
@@ -7552,7 +7802,8 @@ static void le_read_max_adv_data_len_rsp(const void *data, uint8_t size)
        print_field("Max length: %d", rsp->max_len);
 }
 
-static void le_read_num_supported_adv_sets_rsp(const void *data, uint8_t size)
+static void le_read_num_supported_adv_sets_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_num_supported_adv_sets *rsp = data;
 
@@ -7560,7 +7811,8 @@ static void le_read_num_supported_adv_sets_rsp(const void *data, uint8_t size)
        print_field("Num supported adv sets: %d", rsp->num_of_sets);
 }
 
-static void le_remove_adv_set_cmd(const void *data, uint8_t size)
+static void le_remove_adv_set_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_remove_adv_set *cmd = data;
 
@@ -7585,7 +7837,7 @@ static void print_pa_properties(uint16_t flags)
                                                                        mask);
 }
 
-static void le_set_pa_params_cmd(const void *data, uint8_t size)
+static void le_set_pa_params_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_set_pa_params *cmd = data;
 
@@ -7595,7 +7847,7 @@ static void le_set_pa_params_cmd(const void *data, uint8_t size)
        print_pa_properties(cmd->properties);
 }
 
-static void le_set_pa_data_cmd(const void *data, uint8_t size)
+static void le_set_pa_data_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_set_pa_data *cmd = data;
        const char *str;
@@ -7625,7 +7877,7 @@ static void le_set_pa_data_cmd(const void *data, uint8_t size)
        print_eir(cmd->data, cmd->data_len, true);
 }
 
-static void le_set_pa_enable_cmd(const void *data, uint8_t size)
+static void le_set_pa_enable_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_set_pa_enable *cmd = data;
 
@@ -7668,7 +7920,8 @@ static void print_ext_scan_phys(const void *data, uint8_t flags)
                                                        " (0x%2.2x)", mask);
 }
 
-static void le_set_ext_scan_params_cmd(const void *data, uint8_t size)
+static void le_set_ext_scan_params_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_ext_scan_params *cmd = data;
 
@@ -7677,7 +7930,8 @@ static void le_set_ext_scan_params_cmd(const void *data, uint8_t size)
        print_ext_scan_phys(cmd->data, cmd->num_phys);
 }
 
-static void le_set_ext_scan_enable_cmd(const void *data, uint8_t size)
+static void le_set_ext_scan_enable_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_ext_scan_enable *cmd = data;
 
@@ -7740,7 +7994,8 @@ static void print_ext_conn_phys(const void *data, uint8_t flags)
                                                        " (0x%2.2x)", mask);
 }
 
-static void le_ext_create_conn_cmd(const void *data, uint8_t size)
+static void le_ext_create_conn_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_ext_create_conn *cmd = data;
        const char *str;
@@ -7824,7 +8079,8 @@ static void print_create_sync_options(uint8_t flags)
        }
 }
 
-static void le_pa_create_sync_cmd(const void *data, uint8_t size)
+static void le_pa_create_sync_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_pa_create_sync *cmd = data;
 
@@ -7839,14 +8095,15 @@ static void le_pa_create_sync_cmd(const void *data, uint8_t size)
        print_create_sync_cte_type(cmd->sync_cte_type);
 }
 
-static void le_pa_term_sync_cmd(const void *data, uint8_t size)
+static void le_pa_term_sync_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_pa_term_sync *cmd = data;
 
        print_field("Sync handle: 0x%4.4x", cmd->sync_handle);
 }
 
-static void le_add_dev_pa_list_cmd(const void *data, uint8_t size)
+static void le_add_dev_pa_list_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_add_dev_pa_list *cmd = data;
 
@@ -7855,7 +8112,8 @@ static void le_add_dev_pa_list_cmd(const void *data, uint8_t size)
        print_field("SID: 0x%2.2x", cmd->sid);
 }
 
-static void le_remove_dev_pa_list_cmd(const void *data, uint8_t size)
+static void le_remove_dev_pa_list_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_remove_dev_pa_list *cmd = data;
 
@@ -7864,7 +8122,8 @@ static void le_remove_dev_pa_list_cmd(const void *data, uint8_t size)
        print_field("SID: 0x%2.2x", cmd->sid);
 }
 
-static void le_read_pa_list_size_rsp(const void *data, uint8_t size)
+static void le_read_pa_list_size_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_dev_pa_list_size *rsp = data;
 
@@ -7872,7 +8131,8 @@ static void le_read_pa_list_size_rsp(const void *data, uint8_t size)
        print_field("List size: 0x%2.2x", rsp->list_size);
 }
 
-static void le_read_tx_power_rsp(const void *data, uint8_t size)
+static void le_read_tx_power_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_tx_power *rsp = data;
 
@@ -7881,7 +8141,8 @@ static void le_read_tx_power_rsp(const void *data, uint8_t size)
        print_field("Max Tx power: %d dBm", rsp->max_tx_power);
 }
 
-static void le_read_rf_path_comp_rsp(const void *data, uint8_t size)
+static void le_read_rf_path_comp_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_rf_path_comp *rsp = data;
 
@@ -7892,7 +8153,8 @@ static void le_read_rf_path_comp_rsp(const void *data, uint8_t size)
                                                        rsp->rf_rx_path_comp);
 }
 
-static void le_write_rf_path_comp_cmd(const void *data, uint8_t size)
+static void le_write_rf_path_comp_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_write_rf_path_comp *cmd = data;
 
@@ -7902,7 +8164,7 @@ static void le_write_rf_path_comp_cmd(const void *data, uint8_t size)
                                                        cmd->rf_rx_path_comp);
 }
 
-static void le_set_priv_mode_cmd(const void *data, uint8_t size)
+static void le_set_priv_mode_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_set_priv_mode *cmd = data;
        const char *str;
@@ -7926,7 +8188,8 @@ static void le_set_priv_mode_cmd(const void *data, uint8_t size)
        print_field("Privacy Mode: %s (0x%2.2x)", str, cmd->priv_mode);
 }
 
-static void le_receiver_test_cmd_v3(const void *data, uint8_t size)
+static void le_receiver_test_cmd_v3(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_receiver_test_v3 *cmd = data;
        uint8_t i;
@@ -7987,7 +8250,7 @@ static const char *parse_tx_test_payload(uint8_t payload)
        }
 }
 
-static void le_tx_test_cmd_v3(const void *data, uint8_t size)
+static void le_tx_test_cmd_v3(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_tx_test_v3 *cmd = data;
        uint8_t i;
@@ -8028,7 +8291,7 @@ static void le_tx_test_cmd_v3(const void *data, uint8_t size)
                print_field("  Antenna ID: %u", cmd->antenna_ids[i]);
 }
 
-static void le_pa_rec_enable(const void *data, uint8_t size)
+static void le_pa_rec_enable(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_set_pa_enable *cmd = data;
 
@@ -8036,7 +8299,7 @@ static void le_pa_rec_enable(const void *data, uint8_t size)
        print_enable("Reporting", cmd->enable);
 }
 
-static void le_pa_sync_trans(const void *data, uint8_t size)
+static void le_pa_sync_trans(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_periodic_sync_trans *cmd = data;
 
@@ -8045,7 +8308,7 @@ static void le_pa_sync_trans(const void *data, uint8_t size)
        print_field("Sync handle: %d", cmd->sync_handle);
 }
 
-static void le_pa_set_info_trans(const void *data, uint8_t size)
+static void le_pa_set_info_trans(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_pa_set_info_trans *cmd = data;
 
@@ -8076,7 +8339,8 @@ static void print_sync_mode(uint8_t mode)
        print_field("Mode: %s (0x%2.2x)", str, mode);
 }
 
-static void le_pa_sync_trans_params(const void *data, uint8_t size)
+static void le_pa_sync_trans_params(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_pa_sync_trans_params *cmd = data;
 
@@ -8089,8 +8353,8 @@ static void le_pa_sync_trans_params(const void *data, uint8_t size)
        print_create_sync_cte_type(cmd->cte_type);
 }
 
-static void le_set_default_pa_sync_trans_params(const void *data,
-                                                               uint8_t size)
+static void le_set_default_pa_sync_trans_params(uint16_t index,
+                                               const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_default_pa_sync_trans_params *cmd = data;
 
@@ -8162,7 +8426,8 @@ static void print_framing(uint8_t value)
        }
 }
 
-static void le_read_buffer_size_v2_rsp(const void *data, uint8_t size)
+static void le_read_buffer_size_v2_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_buffer_size_v2 *rsp = data;
 
@@ -8177,14 +8442,16 @@ static void le_read_buffer_size_v2_rsp(const void *data, uint8_t size)
        print_field("ISO max packet: %d", rsp->iso_max_pkt);
 }
 
-static void le_read_iso_tx_sync_cmd(const void *data, uint8_t size)
+static void le_read_iso_tx_sync_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_read_iso_tx_sync *cmd = data;
 
        print_field("Handle: %d", le16_to_cpu(cmd->handle));
 }
 
-static void le_read_iso_tx_sync_rsp(const void *data, uint8_t size)
+static void le_read_iso_tx_sync_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_read_iso_tx_sync *rsp = data;
        uint32_t offset = 0;
@@ -8220,7 +8487,8 @@ static void print_cis_params(const void *data, int i)
                                                        cis->p_rtn);
 }
 
-static void le_set_cig_params_cmd(const void *data, uint8_t size)
+static void le_set_cig_params_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_cig_params *cmd = data;
 
@@ -8264,7 +8532,8 @@ static void print_cis_params_test(const void *data, int i)
        print_field("Peripheral to Central Burst Number: 0x%2.2x", cis->p_bn);
 }
 
-static void le_set_cig_params_test_cmd(const void *data, uint8_t size)
+static void le_set_cig_params_test_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_cig_params_test *cmd = data;
 
@@ -8296,7 +8565,8 @@ static void print_cig_handle(const void *data, int i)
        print_field("Connection Handle #%d: %d", i, handle);
 }
 
-static void le_set_cig_params_rsp(const void *data, uint8_t size)
+static void le_set_cig_params_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_set_cig_params *rsp = data;
 
@@ -8322,7 +8592,7 @@ static void print_cis(const void *data, int i)
        print_field("ACL Handle: %d", cis->acl_handle);
 }
 
-static void le_create_cis_cmd(const void *data, uint8_t size)
+static void le_create_cis_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_create_cis *cmd = data;
 
@@ -8333,14 +8603,14 @@ static void le_create_cis_cmd(const void *data, uint8_t size)
        print_list(cmd->cis, size, cmd->num_cis, sizeof(*cmd->cis), print_cis);
 }
 
-static void le_remove_cig_cmd(const void *data, uint8_t size)
+static void le_remove_cig_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_remove_cig *cmd = data;
 
        print_field("CIG ID: 0x%02x", cmd->cig_id);
 }
 
-static void le_remove_cig_rsp(const void *data, uint8_t size)
+static void le_remove_cig_rsp(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_rsp_le_remove_cig *rsp = data;
 
@@ -8352,14 +8622,16 @@ static void le_remove_cig_rsp(const void *data, uint8_t size)
        print_field("CIG ID: 0x%2.2x", rsp->cig_id);
 }
 
-static void le_accept_cis_req_cmd(const void *data, uint8_t size)
+static void le_accept_cis_req_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_accept_cis *cmd = data;
 
        print_field("CIS Handle: %d", le16_to_cpu(cmd->handle));
 }
 
-static void le_reject_cis_req_cmd(const void *data, uint8_t size)
+static void le_reject_cis_req_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_reject_cis *cmd = data;
 
@@ -8381,7 +8653,7 @@ static void print_bis(const struct bt_hci_bis *bis)
        print_hex_field("Broadcast Code", bis->bcode, 16);
 }
 
-static void le_create_big_cmd(const void *data, uint8_t size)
+static void le_create_big_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_create_big *cmd = data;
 
@@ -8412,7 +8684,8 @@ static void print_bis_test(const void *data, int i)
        print_hex_field("Broadcast Code", bis->bcode, 16);
 }
 
-static void le_create_big_cmd_test_cmd(const void *data, uint8_t size)
+static void le_create_big_cmd_test_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_create_big_test *cmd = data;
 
@@ -8426,7 +8699,7 @@ static void le_create_big_cmd_test_cmd(const void *data, uint8_t size)
                                                print_bis_test);
 }
 
-static void le_terminate_big_cmd(const void *data, uint8_t size)
+static void le_terminate_big_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_term_big *cmd = data;
 
@@ -8441,7 +8714,8 @@ static void print_bis_sync(const void *data, int i)
        print_field("BIS ID: 0x%2.2x", *bis_id);
 }
 
-static void le_big_create_sync_cmd(const void *data, uint8_t size)
+static void le_big_create_sync_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_big_create_sync *cmd = data;
 
@@ -8462,7 +8736,7 @@ static void le_big_create_sync_cmd(const void *data, uint8_t size)
                                                print_bis_sync);
 }
 
-static void le_big_term_sync_cmd(const void *data, uint8_t size)
+static void le_big_term_sync_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_big_term_sync *cmd = data;
 
@@ -8483,7 +8757,8 @@ static void print_iso_path(const char *prefix, uint8_t path)
        }
 }
 
-static void le_setup_iso_path_cmd(const void *data, uint8_t size)
+static void le_setup_iso_path_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_setup_iso_path *cmd = data;
 
@@ -8499,7 +8774,8 @@ static void le_setup_iso_path_cmd(const void *data, uint8_t size)
                                                cmd->codec_cfg_len);
 }
 
-static void le_setup_iso_path_rsp(const void *data, uint8_t size)
+static void le_setup_iso_path_rsp(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_rsp_le_setup_iso_path *rsp = data;
 
@@ -8511,7 +8787,8 @@ static void le_setup_iso_path_rsp(const void *data, uint8_t size)
        print_field("Handle: %d", le16_to_cpu(rsp->handle));
 }
 
-static void le_remove_iso_path_cmd(const void *data, uint8_t size)
+static void le_remove_iso_path_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_remove_iso_path *cmd = data;
 
@@ -8519,14 +8796,15 @@ static void le_remove_iso_path_cmd(const void *data, uint8_t size)
        print_path_direction("Data Path Direction", cmd->direction);
 }
 
-static void le_req_peer_sca_cmd(const void *data, uint8_t size)
+static void le_req_peer_sca_cmd(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_cmd_le_req_peer_sca *cmd = data;
 
        print_field("Connection Handle: %d", le16_to_cpu(cmd->handle));
 }
 
-static void le_set_host_feature_cmd(const void *data, uint8_t size)
+static void le_set_host_feature_cmd(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_cmd_le_set_host_feature *cmd = data;
        uint64_t mask;
@@ -8546,10 +8824,10 @@ struct opcode_data {
        uint16_t opcode;
        int bit;
        const char *str;
-       void (*cmd_func) (const void *data, uint8_t size);
+       void (*cmd_func) (uint16_t index, const void *data, uint8_t size);
        uint8_t cmd_size;
        bool cmd_fixed;
-       void (*rsp_func) (const void *data, uint8_t size);
+       void (*rsp_func) (uint16_t index, const void *data, uint8_t size);
        uint8_t rsp_size;
        bool rsp_fixed;
 };
@@ -9599,14 +9877,14 @@ static const struct vendor_evt *current_vendor_evt(const void *data,
        return NULL;
 }
 
-static void inquiry_complete_evt(const void *data, uint8_t size)
+static void inquiry_complete_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_inquiry_complete *evt = data;
 
        print_status(evt->status);
 }
 
-static void inquiry_result_evt(const void *data, uint8_t size)
+static void inquiry_result_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_inquiry_result *evt = data;
 
@@ -9622,7 +9900,7 @@ static void inquiry_result_evt(const void *data, uint8_t size)
                packet_hexdump(data + sizeof(*evt), size - sizeof(*evt));
 }
 
-static void conn_complete_evt(const void *data, uint8_t size)
+static void conn_complete_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_conn_complete *evt = data;
 
@@ -9633,10 +9911,11 @@ static void conn_complete_evt(const void *data, uint8_t size)
        print_enable("Encryption", evt->encr_mode);
 
        if (evt->status == 0x00)
-               assign_handle(le16_to_cpu(evt->handle), 0x00);
+               assign_handle(index, le16_to_cpu(evt->handle), 0x00,
+                                       (void *)evt->bdaddr, BDADDR_BREDR);
 }
 
-static void conn_request_evt(const void *data, uint8_t size)
+static void conn_request_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_conn_request *evt = data;
 
@@ -9645,7 +9924,8 @@ static void conn_request_evt(const void *data, uint8_t size)
        print_link_type(evt->link_type);
 }
 
-static void disconnect_complete_evt(const void *data, uint8_t size)
+static void disconnect_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_disconnect_complete *evt = data;
 
@@ -9657,7 +9937,7 @@ static void disconnect_complete_evt(const void *data, uint8_t size)
                release_handle(le16_to_cpu(evt->handle));
 }
 
-static void auth_complete_evt(const void *data, uint8_t size)
+static void auth_complete_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_auth_complete *evt = data;
 
@@ -9665,7 +9945,8 @@ static void auth_complete_evt(const void *data, uint8_t size)
        print_handle(evt->handle);
 }
 
-static void remote_name_request_complete_evt(const void *data, uint8_t size)
+static void remote_name_request_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_remote_name_request_complete *evt = data;
 
@@ -9674,7 +9955,7 @@ static void remote_name_request_complete_evt(const void *data, uint8_t size)
        print_name(evt->name);
 }
 
-static void encrypt_change_evt(const void *data, uint8_t size)
+static void encrypt_change_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_encrypt_change *evt = data;
 
@@ -9683,7 +9964,8 @@ static void encrypt_change_evt(const void *data, uint8_t size)
        print_encr_mode_change(evt->encr_mode, evt->handle);
 }
 
-static void change_conn_link_key_complete_evt(const void *data, uint8_t size)
+static void change_conn_link_key_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_change_conn_link_key_complete *evt = data;
 
@@ -9691,7 +9973,8 @@ static void change_conn_link_key_complete_evt(const void *data, uint8_t size)
        print_handle(evt->handle);
 }
 
-static void link_key_type_changed_evt(const void *data, uint8_t size)
+static void link_key_type_changed_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_link_key_type_changed *evt = data;
 
@@ -9700,7 +9983,8 @@ static void link_key_type_changed_evt(const void *data, uint8_t size)
        print_key_flag(evt->key_flag);
 }
 
-static void remote_features_complete_evt(const void *data, uint8_t size)
+static void remote_features_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_remote_features_complete *evt = data;
 
@@ -9709,7 +9993,8 @@ static void remote_features_complete_evt(const void *data, uint8_t size)
        print_features(0, evt->features, 0x00);
 }
 
-static void remote_version_complete_evt(const void *data, uint8_t size)
+static void remote_version_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_remote_version_complete *evt = data;
 
@@ -9725,7 +10010,8 @@ static void remote_version_complete_evt(const void *data, uint8_t size)
        }
 }
 
-static void qos_setup_complete_evt(const void *data, uint8_t size)
+static void qos_setup_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_qos_setup_complete *evt = data;
 
@@ -9741,7 +10027,7 @@ static void qos_setup_complete_evt(const void *data, uint8_t size)
        print_field("Delay variation: %d", le32_to_cpu(evt->delay_variation));
 }
 
-static void cmd_complete_evt(const void *data, uint8_t size)
+static void cmd_complete_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_cmd_complete *evt = data;
        uint16_t opcode = le16_to_cpu(evt->opcode);
@@ -9834,10 +10120,10 @@ static void cmd_complete_evt(const void *data, uint8_t size)
                }
        }
 
-       opcode_data->rsp_func(data + 3, size - 3);
+       opcode_data->rsp_func(index, data + 3, size - 3);
 }
 
-static void cmd_status_evt(const void *data, uint8_t size)
+static void cmd_status_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_cmd_status *evt = data;
        uint16_t opcode = le16_to_cpu(evt->opcode);
@@ -9889,21 +10175,21 @@ static void cmd_status_evt(const void *data, uint8_t size)
        print_status(evt->status);
 }
 
-static void hardware_error_evt(const void *data, uint8_t size)
+static void hardware_error_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_hardware_error *evt = data;
 
        print_field("Code: 0x%2.2x", evt->code);
 }
 
-static void flush_occurred_evt(const void *data, uint8_t size)
+static void flush_occurred_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_flush_occurred *evt = data;
 
        print_handle(evt->handle);
 }
 
-static void role_change_evt(const void *data, uint8_t size)
+static void role_change_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_role_change *evt = data;
 
@@ -9912,7 +10198,8 @@ static void role_change_evt(const void *data, uint8_t size)
        print_role(evt->role);
 }
 
-static void num_completed_packets_evt(const void *data, uint8_t size)
+static void num_completed_packets_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_num_completed_packets *evt = data;
 
@@ -9924,7 +10211,7 @@ static void num_completed_packets_evt(const void *data, uint8_t size)
                packet_hexdump(data + sizeof(*evt), size - sizeof(*evt));
 }
 
-static void mode_change_evt(const void *data, uint8_t size)
+static void mode_change_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_mode_change *evt = data;
 
@@ -9934,7 +10221,7 @@ static void mode_change_evt(const void *data, uint8_t size)
        print_interval(evt->interval);
 }
 
-static void return_link_keys_evt(const void *data, uint8_t size)
+static void return_link_keys_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_return_link_keys *evt = data;
        uint8_t i;
@@ -9947,21 +10234,21 @@ static void return_link_keys_evt(const void *data, uint8_t size)
        }
 }
 
-static void pin_code_request_evt(const void *data, uint8_t size)
+static void pin_code_request_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_pin_code_request *evt = data;
 
        print_bdaddr(evt->bdaddr);
 }
 
-static void link_key_request_evt(const void *data, uint8_t size)
+static void link_key_request_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_link_key_request *evt = data;
 
        print_bdaddr(evt->bdaddr);
 }
 
-static void link_key_notify_evt(const void *data, uint8_t size)
+static void link_key_notify_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_link_key_notify *evt = data;
 
@@ -9970,19 +10257,20 @@ static void link_key_notify_evt(const void *data, uint8_t size)
        print_key_type(evt->key_type);
 }
 
-static void loopback_command_evt(const void *data, uint8_t size)
+static void loopback_command_evt(uint16_t index, const void *data, uint8_t size)
 {
        packet_hexdump(data, size);
 }
 
-static void data_buffer_overflow_evt(const void *data, uint8_t size)
+static void data_buffer_overflow_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_data_buffer_overflow *evt = data;
 
        print_link_type(evt->link_type);
 }
 
-static void max_slots_change_evt(const void *data, uint8_t size)
+static void max_slots_change_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_max_slots_change *evt = data;
 
@@ -9990,7 +10278,8 @@ static void max_slots_change_evt(const void *data, uint8_t size)
        print_field("Max slots: %d", evt->max_slots);
 }
 
-static void clock_offset_complete_evt(const void *data, uint8_t size)
+static void clock_offset_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_clock_offset_complete *evt = data;
 
@@ -9999,7 +10288,8 @@ static void clock_offset_complete_evt(const void *data, uint8_t size)
        print_clock_offset(evt->clock_offset);
 }
 
-static void conn_pkt_type_changed_evt(const void *data, uint8_t size)
+static void conn_pkt_type_changed_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_conn_pkt_type_changed *evt = data;
 
@@ -10008,14 +10298,15 @@ static void conn_pkt_type_changed_evt(const void *data, uint8_t size)
        print_pkt_type(evt->pkt_type);
 }
 
-static void qos_violation_evt(const void *data, uint8_t size)
+static void qos_violation_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_qos_violation *evt = data;
 
        print_handle(evt->handle);
 }
 
-static void pscan_mode_change_evt(const void *data, uint8_t size)
+static void pscan_mode_change_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_pscan_mode_change *evt = data;
 
@@ -10023,7 +10314,8 @@ static void pscan_mode_change_evt(const void *data, uint8_t size)
        print_pscan_mode(evt->pscan_mode);
 }
 
-static void pscan_rep_mode_change_evt(const void *data, uint8_t size)
+static void pscan_rep_mode_change_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_pscan_rep_mode_change *evt = data;
 
@@ -10031,7 +10323,8 @@ static void pscan_rep_mode_change_evt(const void *data, uint8_t size)
        print_pscan_rep_mode(evt->pscan_rep_mode);
 }
 
-static void flow_spec_complete_evt(const void *data, uint8_t size)
+static void flow_spec_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_flow_spec_complete *evt = data;
 
@@ -10049,7 +10342,8 @@ static void flow_spec_complete_evt(const void *data, uint8_t size)
        print_field("Access latency: %d", le32_to_cpu(evt->access_latency));
 }
 
-static void inquiry_result_with_rssi_evt(const void *data, uint8_t size)
+static void inquiry_result_with_rssi_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_inquiry_result_with_rssi *evt = data;
 
@@ -10065,7 +10359,8 @@ static void inquiry_result_with_rssi_evt(const void *data, uint8_t size)
                packet_hexdump(data + sizeof(*evt), size - sizeof(*evt));
 }
 
-static void remote_ext_features_complete_evt(const void *data, uint8_t size)
+static void remote_ext_features_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_remote_ext_features_complete *evt = data;
 
@@ -10075,7 +10370,8 @@ static void remote_ext_features_complete_evt(const void *data, uint8_t size)
        print_features(evt->page, evt->features, 0x00);
 }
 
-static void sync_conn_complete_evt(const void *data, uint8_t size)
+static void sync_conn_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_sync_conn_complete *evt = data;
 
@@ -10090,7 +10386,8 @@ static void sync_conn_complete_evt(const void *data, uint8_t size)
        print_air_mode(evt->air_mode);
 }
 
-static void sync_conn_changed_evt(const void *data, uint8_t size)
+static void sync_conn_changed_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_sync_conn_changed *evt = data;
 
@@ -10102,7 +10399,7 @@ static void sync_conn_changed_evt(const void *data, uint8_t size)
        print_field("TX packet length: %d", le16_to_cpu(evt->tx_pkt_len));
 }
 
-static void sniff_subrating_evt(const void *data, uint8_t size)
+static void sniff_subrating_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_sniff_subrating *evt = data;
 
@@ -10114,7 +10411,8 @@ static void sniff_subrating_evt(const void *data, uint8_t size)
        print_slot_625("Min local timeout", evt->min_local_timeout);
 }
 
-static void ext_inquiry_result_evt(const void *data, uint8_t size)
+static void ext_inquiry_result_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_ext_inquiry_result *evt = data;
 
@@ -10128,7 +10426,8 @@ static void ext_inquiry_result_evt(const void *data, uint8_t size)
        print_eir(evt->data, sizeof(evt->data), false);
 }
 
-static void encrypt_key_refresh_complete_evt(const void *data, uint8_t size)
+static void encrypt_key_refresh_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_encrypt_key_refresh_complete *evt = data;
 
@@ -10136,14 +10435,16 @@ static void encrypt_key_refresh_complete_evt(const void *data, uint8_t size)
        print_handle(evt->handle);
 }
 
-static void io_capability_request_evt(const void *data, uint8_t size)
+static void io_capability_request_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_io_capability_request *evt = data;
 
        print_bdaddr(evt->bdaddr);
 }
 
-static void io_capability_response_evt(const void *data, uint8_t size)
+static void io_capability_response_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_io_capability_response *evt = data;
 
@@ -10153,7 +10454,8 @@ static void io_capability_response_evt(const void *data, uint8_t size)
        print_authentication(evt->authentication);
 }
 
-static void user_confirm_request_evt(const void *data, uint8_t size)
+static void user_confirm_request_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_user_confirm_request *evt = data;
 
@@ -10161,21 +10463,24 @@ static void user_confirm_request_evt(const void *data, uint8_t size)
        print_passkey(evt->passkey);
 }
 
-static void user_passkey_request_evt(const void *data, uint8_t size)
+static void user_passkey_request_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_user_passkey_request *evt = data;
 
        print_bdaddr(evt->bdaddr);
 }
 
-static void remote_oob_data_request_evt(const void *data, uint8_t size)
+static void remote_oob_data_request_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_remote_oob_data_request *evt = data;
 
        print_bdaddr(evt->bdaddr);
 }
 
-static void simple_pairing_complete_evt(const void *data, uint8_t size)
+static void simple_pairing_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_simple_pairing_complete *evt = data;
 
@@ -10183,7 +10488,8 @@ static void simple_pairing_complete_evt(const void *data, uint8_t size)
        print_bdaddr(evt->bdaddr);
 }
 
-static void link_supv_timeout_changed_evt(const void *data, uint8_t size)
+static void link_supv_timeout_changed_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_link_supv_timeout_changed *evt = data;
 
@@ -10191,14 +10497,16 @@ static void link_supv_timeout_changed_evt(const void *data, uint8_t size)
        print_timeout(evt->timeout);
 }
 
-static void enhanced_flush_complete_evt(const void *data, uint8_t size)
+static void enhanced_flush_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_enhanced_flush_complete *evt = data;
 
        print_handle(evt->handle);
 }
 
-static void user_passkey_notify_evt(const void *data, uint8_t size)
+static void user_passkey_notify_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_user_passkey_notify *evt = data;
 
@@ -10206,7 +10514,7 @@ static void user_passkey_notify_evt(const void *data, uint8_t size)
        print_passkey(evt->passkey);
 }
 
-static void keypress_notify_evt(const void *data, uint8_t size)
+static void keypress_notify_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_keypress_notify *evt = data;
        const char *str;
@@ -10237,7 +10545,8 @@ static void keypress_notify_evt(const void *data, uint8_t size)
        print_field("Notification type: %s (0x%2.2x)", str, evt->type);
 }
 
-static void remote_host_features_notify_evt(const void *data, uint8_t size)
+static void remote_host_features_notify_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_remote_host_features_notify *evt = data;
 
@@ -10245,7 +10554,8 @@ static void remote_host_features_notify_evt(const void *data, uint8_t size)
        print_features(1, evt->features, 0x00);
 }
 
-static void phy_link_complete_evt(const void *data, uint8_t size)
+static void phy_link_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_phy_link_complete *evt = data;
 
@@ -10253,14 +10563,15 @@ static void phy_link_complete_evt(const void *data, uint8_t size)
        print_phy_handle(evt->phy_handle);
 }
 
-static void channel_selected_evt(const void *data, uint8_t size)
+static void channel_selected_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_channel_selected *evt = data;
 
        print_phy_handle(evt->phy_handle);
 }
 
-static void disconn_phy_link_complete_evt(const void *data, uint8_t size)
+static void disconn_phy_link_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_disconn_phy_link_complete *evt = data;
 
@@ -10269,7 +10580,8 @@ static void disconn_phy_link_complete_evt(const void *data, uint8_t size)
        print_reason(evt->reason);
 }
 
-static void phy_link_loss_early_warning_evt(const void *data, uint8_t size)
+static void phy_link_loss_early_warning_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_phy_link_loss_early_warning *evt = data;
        const char *str;
@@ -10300,14 +10612,16 @@ static void phy_link_loss_early_warning_evt(const void *data, uint8_t size)
        print_field("Reason: %s (0x%2.2x)", str, evt->reason);
 }
 
-static void phy_link_recovery_evt(const void *data, uint8_t size)
+static void phy_link_recovery_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_phy_link_recovery *evt = data;
 
        print_phy_handle(evt->phy_handle);
 }
 
-static void logic_link_complete_evt(const void *data, uint8_t size)
+static void logic_link_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_logic_link_complete *evt = data;
 
@@ -10317,7 +10631,8 @@ static void logic_link_complete_evt(const void *data, uint8_t size)
        print_field("TX flow spec: 0x%2.2x", evt->flow_spec);
 }
 
-static void disconn_logic_link_complete_evt(const void *data, uint8_t size)
+static void disconn_logic_link_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_disconn_logic_link_complete *evt = data;
 
@@ -10326,7 +10641,8 @@ static void disconn_logic_link_complete_evt(const void *data, uint8_t size)
        print_reason(evt->reason);
 }
 
-static void flow_spec_modify_complete_evt(const void *data, uint8_t size)
+static void flow_spec_modify_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_flow_spec_modify_complete *evt = data;
 
@@ -10334,7 +10650,8 @@ static void flow_spec_modify_complete_evt(const void *data, uint8_t size)
        print_handle(evt->handle);
 }
 
-static void num_completed_data_blocks_evt(const void *data, uint8_t size)
+static void num_completed_data_blocks_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_num_completed_data_blocks *evt = data;
 
@@ -10349,7 +10666,8 @@ static void num_completed_data_blocks_evt(const void *data, uint8_t size)
                packet_hexdump(data + sizeof(*evt), size - sizeof(*evt));
 }
 
-static void short_range_mode_change_evt(const void *data, uint8_t size)
+static void short_range_mode_change_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_short_range_mode_change *evt = data;
 
@@ -10358,7 +10676,8 @@ static void short_range_mode_change_evt(const void *data, uint8_t size)
        print_enable("Short range mode", evt->mode);
 }
 
-static void amp_status_change_evt(const void *data, uint8_t size)
+static void amp_status_change_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_amp_status_change *evt = data;
 
@@ -10366,7 +10685,8 @@ static void amp_status_change_evt(const void *data, uint8_t size)
        print_amp_status(evt->amp_status);
 }
 
-static void triggered_clock_capture_evt(const void *data, uint8_t size)
+static void triggered_clock_capture_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_triggered_clock_capture *evt = data;
 
@@ -10376,14 +10696,16 @@ static void triggered_clock_capture_evt(const void *data, uint8_t size)
        print_clock_offset(evt->clock_offset);
 }
 
-static void sync_train_complete_evt(const void *data, uint8_t size)
+static void sync_train_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_sync_train_complete *evt = data;
 
        print_status(evt->status);
 }
 
-static void sync_train_received_evt(const void *data, uint8_t size)
+static void sync_train_received_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_sync_train_received *evt = data;
 
@@ -10398,7 +10720,8 @@ static void sync_train_received_evt(const void *data, uint8_t size)
        print_field("Service Data: 0x%2.2x", evt->service_data);
 }
 
-static void peripheral_broadcast_receive_evt(const void *data, uint8_t size)
+static void peripheral_broadcast_receive_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_peripheral_broadcast_receive *evt = data;
 
@@ -10420,7 +10743,8 @@ static void peripheral_broadcast_receive_evt(const void *data, uint8_t size)
                packet_hexdump(data + 18, size - 18);
 }
 
-static void peripheral_broadcast_timeout_evt(const void *data, uint8_t size)
+static void peripheral_broadcast_timeout_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_peripheral_broadcast_timeout *evt = data;
 
@@ -10428,7 +10752,8 @@ static void peripheral_broadcast_timeout_evt(const void *data, uint8_t size)
        print_lt_addr(evt->lt_addr);
 }
 
-static void truncated_page_complete_evt(const void *data, uint8_t size)
+static void truncated_page_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_truncated_page_complete *evt = data;
 
@@ -10436,18 +10761,21 @@ static void truncated_page_complete_evt(const void *data, uint8_t size)
        print_bdaddr(evt->bdaddr);
 }
 
-static void peripheral_page_response_timeout_evt(const void *data, uint8_t size)
+static void peripheral_page_response_timeout_evt(uint16_t index,
+                                               const void *data, uint8_t size)
 {
 }
 
-static void channel_map_change_evt(const void *data, uint8_t size)
+static void channel_map_change_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_channel_map_change *evt = data;
 
        print_channel_map(evt->map);
 }
 
-static void inquiry_response_notify_evt(const void *data, uint8_t size)
+static void inquiry_response_notify_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_inquiry_response_notify *evt = data;
 
@@ -10455,14 +10783,15 @@ static void inquiry_response_notify_evt(const void *data, uint8_t size)
        print_rssi(evt->rssi);
 }
 
-static void auth_payload_timeout_expired_evt(const void *data, uint8_t size)
+static void auth_payload_timeout_expired_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_auth_payload_timeout_expired *evt = data;
 
        print_handle(evt->handle);
 }
 
-static void le_conn_complete_evt(const void *data, uint8_t size)
+static void le_conn_complete_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_conn_complete *evt = data;
 
@@ -10479,10 +10808,11 @@ static void le_conn_complete_evt(const void *data, uint8_t size)
        print_field("Central clock accuracy: 0x%2.2x", evt->clock_accuracy);
 
        if (evt->status == 0x00)
-               assign_handle(le16_to_cpu(evt->handle), 0x01);
+               assign_handle(index, le16_to_cpu(evt->handle), 0x01,
+                               (void *)evt->peer_addr, evt->peer_addr_type);
 }
 
-static void le_adv_report_evt(const void *data, uint8_t size)
+static void le_adv_report_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_adv_report *evt = data;
        uint8_t evt_len;
@@ -10510,7 +10840,8 @@ report:
        }
 }
 
-static void le_conn_update_complete_evt(const void *data, uint8_t size)
+static void le_conn_update_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_conn_update_complete *evt = data;
 
@@ -10523,7 +10854,8 @@ static void le_conn_update_complete_evt(const void *data, uint8_t size)
                                        le16_to_cpu(evt->supv_timeout));
 }
 
-static void le_remote_features_complete_evt(const void *data, uint8_t size)
+static void le_remote_features_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_remote_features_complete *evt = data;
 
@@ -10532,7 +10864,8 @@ static void le_remote_features_complete_evt(const void *data, uint8_t size)
        print_features(0, evt->features, 0x01);
 }
 
-static void le_long_term_key_request_evt(const void *data, uint8_t size)
+static void le_long_term_key_request_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_long_term_key_request *evt = data;
 
@@ -10541,7 +10874,8 @@ static void le_long_term_key_request_evt(const void *data, uint8_t size)
        print_encrypted_diversifier(evt->ediv);
 }
 
-static void le_conn_param_request_evt(const void *data, uint8_t size)
+static void le_conn_param_request_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_conn_param_request *evt = data;
 
@@ -10554,7 +10888,8 @@ static void le_conn_param_request_evt(const void *data, uint8_t size)
                                        le16_to_cpu(evt->supv_timeout));
 }
 
-static void le_data_length_change_evt(const void *data, uint8_t size)
+static void le_data_length_change_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_data_length_change *evt = data;
 
@@ -10565,7 +10900,8 @@ static void le_data_length_change_evt(const void *data, uint8_t size)
        print_field("Max RX time: %d", le16_to_cpu(evt->max_rx_time));
 }
 
-static void le_read_local_pk256_complete_evt(const void *data, uint8_t size)
+static void le_read_local_pk256_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_read_local_pk256_complete *evt = data;
 
@@ -10573,7 +10909,8 @@ static void le_read_local_pk256_complete_evt(const void *data, uint8_t size)
        print_pk256("Local P-256 public key", evt->local_pk256);
 }
 
-static void le_generate_dhkey_complete_evt(const void *data, uint8_t size)
+static void le_generate_dhkey_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_generate_dhkey_complete *evt = data;
 
@@ -10581,7 +10918,8 @@ static void le_generate_dhkey_complete_evt(const void *data, uint8_t size)
        print_dhkey(evt->dhkey);
 }
 
-static void le_enhanced_conn_complete_evt(const void *data, uint8_t size)
+static void le_enhanced_conn_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_enhanced_conn_complete *evt = data;
 
@@ -10600,10 +10938,12 @@ static void le_enhanced_conn_complete_evt(const void *data, uint8_t size)
        print_field("Central clock accuracy: 0x%2.2x", evt->clock_accuracy);
 
        if (evt->status == 0x00)
-               assign_handle(le16_to_cpu(evt->handle), 0x01);
+               assign_handle(index, le16_to_cpu(evt->handle), 0x01,
+                               (void *)evt->peer_addr, evt->peer_addr_type);
 }
 
-static void le_direct_adv_report_evt(const void *data, uint8_t size)
+static void le_direct_adv_report_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_direct_adv_report *evt = data;
 
@@ -10620,7 +10960,8 @@ static void le_direct_adv_report_evt(const void *data, uint8_t size)
                packet_hexdump(data + sizeof(*evt), size - sizeof(*evt));
 }
 
-static void le_phy_update_complete_evt(const void *data, uint8_t size)
+static void le_phy_update_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_phy_update_complete *evt = data;
 
@@ -10723,7 +11064,8 @@ static void print_legacy_adv_report_pdu(uint16_t flags)
        print_field("  Legacy PDU Type: %s (0x%4.4x)", str, flags);
 }
 
-static void le_ext_adv_report_evt(const void *data, uint8_t size)
+static void le_ext_adv_report_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_ext_adv_report *evt = data;
        const struct bt_hci_le_ext_adv_report *report;
@@ -10810,7 +11152,7 @@ static void le_ext_adv_report_evt(const void *data, uint8_t size)
        }
 }
 
-static void le_pa_sync(const void *data, uint8_t size)
+static void le_pa_sync(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_per_sync_established *evt = data;
 
@@ -10828,7 +11170,7 @@ static void le_pa_sync(const void *data, uint8_t size)
        print_field("Advertiser clock accuracy: 0x%2.2x", evt->clock_accuracy);
 }
 
-static void le_pa_report_evt(const void *data, uint8_t size)
+static void le_pa_report_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_le_pa_report *evt = data;
        const char *color_on;
@@ -10889,14 +11231,14 @@ static void le_pa_report_evt(const void *data, uint8_t size)
        packet_hexdump(evt->data, evt->data_len);
 }
 
-static void le_pa_sync_lost(const void *data, uint8_t size)
+static void le_pa_sync_lost(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_per_sync_lost *evt = data;
 
        print_field("Sync handle: %d", evt->handle);
 }
 
-static void le_adv_set_term_evt(const void *data, uint8_t size)
+static void le_adv_set_term_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_adv_set_term *evt = data;
 
@@ -10907,7 +11249,8 @@ static void le_adv_set_term_evt(const void *data, uint8_t size)
                        evt->num_evts);
 }
 
-static void le_scan_req_received_evt(const void *data, uint8_t size)
+static void le_scan_req_received_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_scan_req_received *evt = data;
 
@@ -10917,7 +11260,8 @@ static void le_scan_req_received_evt(const void *data, uint8_t size)
                                                        evt->scanner_addr_type);
 }
 
-static void le_chan_select_alg_evt(const void *data, uint8_t size)
+static void le_chan_select_alg_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_chan_select_alg *evt = data;
        const char *str;
@@ -10939,7 +11283,8 @@ static void le_chan_select_alg_evt(const void *data, uint8_t size)
        print_field("Algorithm: %s (0x%2.2x)", str, evt->algorithm);
 }
 
-static void le_cte_request_failed_evt(const void *data, uint8_t size)
+static void le_cte_request_failed_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_cte_request_failed *evt = data;
 
@@ -10947,7 +11292,8 @@ static void le_cte_request_failed_evt(const void *data, uint8_t size)
        print_field("Connection handle: %d", evt->handle);
 }
 
-static void le_pa_sync_trans_rec_evt(const void *data, uint8_t size)
+static void le_pa_sync_trans_rec_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_pa_sync_trans_rec *evt = data;
 
@@ -10965,7 +11311,8 @@ static void le_pa_sync_trans_rec_evt(const void *data, uint8_t size)
        print_clock_accuracy(evt->clock_accuracy);
 }
 
-static void le_cis_established_evt(const void *data, uint8_t size)
+static void le_cis_established_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_cis_established *evt = data;
 
@@ -10987,7 +11334,7 @@ static void le_cis_established_evt(const void *data, uint8_t size)
        print_field("ISO Interval: %u", le16_to_cpu(evt->interval));
 }
 
-static void le_req_cis_evt(const void *data, uint8_t size)
+static void le_req_cis_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_cis_req *evt = data;
 
@@ -11004,7 +11351,7 @@ static void print_bis_handle(const void *data, int i)
        print_field("Connection Handle #%d: %d", i, handle);
 }
 
-static void le_big_complete_evt(const void *data, uint8_t size)
+static void le_big_complete_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_big_complete *evt = data;
 
@@ -11023,7 +11370,7 @@ static void le_big_complete_evt(const void *data, uint8_t size)
                        sizeof(*evt->bis_handle), print_bis_handle);
 }
 
-static void le_big_terminate_evt(const void *data, uint8_t size)
+static void le_big_terminate_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_big_terminate *evt = data;
 
@@ -11031,7 +11378,8 @@ static void le_big_terminate_evt(const void *data, uint8_t size)
        print_reason(evt->reason);
 }
 
-static void le_big_sync_estabilished_evt(const void *data, uint8_t size)
+static void le_big_sync_estabilished_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_big_sync_estabilished *evt = data;
 
@@ -11048,7 +11396,7 @@ static void le_big_sync_estabilished_evt(const void *data, uint8_t size)
                                                print_bis_handle);
 }
 
-static void le_big_sync_lost_evt(const void *data, uint8_t size)
+static void le_big_sync_lost_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_big_sync_lost *evt = data;
 
@@ -11056,7 +11404,8 @@ static void le_big_sync_lost_evt(const void *data, uint8_t size)
        print_reason(evt->reason);
 }
 
-static void le_req_sca_complete_evt(const void *data, uint8_t size)
+static void le_req_sca_complete_evt(uint16_t index, const void *data,
+                                                       uint8_t size)
 {
        const struct bt_hci_evt_le_req_peer_sca_complete *evt = data;
 
@@ -11065,7 +11414,7 @@ static void le_req_sca_complete_evt(const void *data, uint8_t size)
        print_sca(evt->sca);
 }
 
-static void le_big_info_evt(const void *data, uint8_t size)
+static void le_big_info_evt(uint16_t index, const void *data, uint8_t size)
 {
        const struct bt_hci_evt_le_big_info_adv_report *evt = data;
 
@@ -11087,13 +11436,14 @@ static void le_big_info_evt(const void *data, uint8_t size)
 struct subevent_data {
        uint8_t subevent;
        const char *str;
-       void (*func) (const void *data, uint8_t size);
+       void (*func) (uint16_t index, const void *data, uint8_t size);
        uint8_t size;
        bool fixed;
 };
 
-static void print_subevent(const struct subevent_data *subevent_data,
-                                       const void *data, uint8_t size)
+static void print_subevent(uint16_t index,
+                               const struct subevent_data *subevent_data,
+                               const void *data, uint8_t size)
 {
        const char *subevent_color;
 
@@ -11124,7 +11474,7 @@ static void print_subevent(const struct subevent_data *subevent_data,
                }
        }
 
-       subevent_data->func(data, size);
+       subevent_data->func(index, data, size);
 }
 
 static const struct subevent_data le_meta_event_table[] = {
@@ -11209,7 +11559,7 @@ static const struct subevent_data le_meta_event_table[] = {
        { }
 };
 
-static void le_meta_event_evt(const void *data, uint8_t size)
+static void le_meta_event_evt(uint16_t index, const void *data, uint8_t size)
 {
        uint8_t subevent = *((const uint8_t *) data);
        struct subevent_data unknown;
@@ -11229,10 +11579,10 @@ static void le_meta_event_evt(const void *data, uint8_t size)
                }
        }
 
-       print_subevent(subevent_data, data + 1, size - 1);
+       print_subevent(index, subevent_data, data + 1, size - 1);
 }
 
-static void vendor_evt(const void *data, uint8_t size)
+static void vendor_evt(uint16_t index, const void *data, uint8_t size)
 {
        struct subevent_data vendor_data;
        char vendor_str[150];
@@ -11253,7 +11603,7 @@ static void vendor_evt(const void *data, uint8_t size)
                vendor_data.size = vnd->evt_size;
                vendor_data.fixed = vnd->evt_fixed;
 
-               print_subevent(&vendor_data, data + consumed_size,
+               print_subevent(index, &vendor_data, data + consumed_size,
                                                        size - consumed_size);
        } else {
                uint16_t manufacturer;
@@ -11270,7 +11620,7 @@ static void vendor_evt(const void *data, uint8_t size)
 struct event_data {
        uint8_t event;
        const char *str;
-       void (*func) (const void *data, uint8_t size);
+       void (*func) (uint16_t index, const void *data, uint8_t size);
        uint8_t size;
        bool fixed;
 };
@@ -11702,7 +12052,7 @@ void packet_hci_command(struct timeval *tv, struct ucred *cred, uint16_t index,
                }
        }
 
-       opcode_data->cmd_func(data, hdr->plen);
+       opcode_data->cmd_func(index, data, hdr->plen);
 }
 
 void packet_hci_event(struct timeval *tv, struct ucred *cred, uint16_t index,
@@ -11782,7 +12132,7 @@ void packet_hci_event(struct timeval *tv, struct ucred *cred, uint16_t index,
                }
        }
 
-       event_data->func(data, hdr->plen);
+       event_data->func(index, data, hdr->plen);
 }
 
 void packet_hci_acldata(struct timeval *tv, struct ucred *cred, uint16_t index,
@@ -14877,26 +15227,31 @@ void packet_todo(void)
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
 void print_le_set_adv_parameters_cmd(const void *data, uint8_t size)
 {
-        le_set_adv_parameters_cmd(data, size);
+       uint16_t dummy = 0;
+        le_set_adv_parameters_cmd(dummy, data, size);
 }
 
 void print_le_set_random_address_cmd(const void *data, uint8_t size)
 {
-        le_set_random_address_cmd(data, size);
+       uint16_t dummy = 0;
+        le_set_random_address_cmd(dummy, data, size);
 }
 
 void print_le_set_adv_data_cmd(const void *data, uint8_t size)
 {
-        le_set_adv_data_cmd(data, size);
+       uint16_t dummy = 0;
+        le_set_adv_data_cmd(dummy, data, size);
 }
 
 void print_le_set_scan_rsp_data_cmd(const void *data, uint8_t size)
 {
-        le_set_scan_rsp_data_cmd(data, size);
+       uint16_t dummy = 0;
+        le_set_scan_rsp_data_cmd(dummy, data, size);
 }
 
 void print_le_set_adv_enable_cmd(const void *data, uint8_t size)
 {
-        le_set_adv_enable_cmd(data, size);
+       uint16_t dummy = 0;
+        le_set_adv_enable_cmd(dummy, data, size);
 }
 #endif
index 259946d..cc93063 100755 (executable)
 #define PACKET_FILTER_SHOW_A2DP_STREAM (1 << 6)
 #define PACKET_FILTER_SHOW_MGMT_SOCKET (1 << 7)
 
+struct packet_conn_data {
+       uint16_t index;
+       uint16_t handle;
+       uint8_t  type;
+       uint8_t  dst[6];
+       uint8_t  dst_type;
+       void     *data;
+       void     (*destroy)(void *data);
+};
+
+struct packet_conn_data *packet_get_conn_data(uint16_t handle);
+
 bool packet_has_filter(unsigned long filter);
 void packet_set_filter(unsigned long filter);
 void packet_add_filter(unsigned long filter);
index c70552b..9430f37 100755 (executable)
 struct vendor_ocf {
        uint16_t ocf;
        const char *str;
-       void (*cmd_func) (const void *data, uint8_t size);
+       void (*cmd_func) (uint16_t index, const void *data, uint8_t size);
        uint8_t cmd_size;
        bool cmd_fixed;
-       void (*rsp_func) (const void *data, uint8_t size);
+       void (*rsp_func) (uint16_t index, const void *data, uint8_t size);
        uint8_t rsp_size;
        bool rsp_fixed;
 };
@@ -25,7 +25,7 @@ struct vendor_ocf {
 struct vendor_evt {
        uint8_t evt;
        const char *str;
-       void (*evt_func) (const void *data, uint8_t size);
+       void (*evt_func) (uint16_t index, const void *data, uint8_t size);
        uint8_t evt_size;
        bool evt_fixed;
 };