monitor: Add support static address and other management commands
diff --git a/monitor/packet.c b/monitor/packet.c
index 8c61ca8..20e4d83 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -9757,7 +9757,7 @@
uint32_t supported_settings = get_le32(data + 9);
uint32_t current_settings = get_le32(data + 13);
- mgmt_print_address(data, 0x00);
+ print_addr_resolve("Address", data, 0x00, false);
mgmt_print_version(version);
mgmt_print_manufacturer(manufacturer);
mgmt_print_settings("Supported settings", supported_settings);
@@ -9849,9 +9849,9 @@
static void mgmt_new_settings_rsp(const void *data, uint16_t size)
{
- uint32_t settings = get_le32(data);
+ uint32_t current_settings = get_le32(data);
- mgmt_print_settings("Current settings", settings);
+ mgmt_print_settings("Current settings", current_settings);
}
static void mgmt_set_device_class_cmd(const void *data, uint16_t size)
@@ -10142,6 +10142,20 @@
mgmt_print_enable("BR/EDR", enable);
}
+static void mgmt_set_static_address_cmd(const void *data, uint16_t size)
+{
+ print_addr_resolve("Address", data, 0x01, false);
+}
+
+static void mgmt_set_scan_parameters_cmd(const void *data, uint16_t size)
+{
+ uint16_t interval = get_le16(data);
+ uint16_t window = get_le16(data + 2);
+
+ print_field("Interval: %u (0x%2.2x)", interval, interval);
+ print_field("Window: %u (0x%2.2x)", window, window);
+}
+
static void mgmt_set_secure_connections_cmd(const void *data, uint16_t size)
{
uint8_t enable = get_u8(data);
@@ -10227,6 +10241,46 @@
mgmt_print_identity_resolving_key(data + 2 + (i * 23));
}
+static void mgmt_get_connection_information_cmd(const void *data, uint16_t size)
+{
+ uint8_t address_type = get_u8(data + 6);
+
+ mgmt_print_address(data, address_type);
+}
+
+static void mgmt_get_connection_information_rsp(const void *data, uint16_t size)
+{
+ uint8_t address_type = get_u8(data + 6);
+ int8_t rssi = get_s8(data + 7);
+ int8_t tx_power = get_s8(data + 8);
+ int8_t max_tx_power = get_s8(data + 9);
+
+ mgmt_print_address(data, address_type);
+ print_rssi(rssi);
+ print_power_level(tx_power, NULL);
+ print_power_level(max_tx_power, "max");
+}
+
+static void mgmt_get_clock_information_cmd(const void *data, uint16_t size)
+{
+ uint8_t address_type = get_u8(data + 6);
+
+ mgmt_print_address(data, address_type);
+}
+
+static void mgmt_get_clock_information_rsp(const void *data, uint16_t size)
+{
+ uint8_t address_type = get_u8(data + 6);
+ uint32_t local_clock = get_le32(data + 7);
+ uint32_t piconet_clock = get_le32(data + 11);
+ uint16_t accuracy = get_le16(data + 15);
+
+ mgmt_print_address(data, address_type);
+ print_field("Local clock: 0x%8.8x", local_clock);
+ print_field("Piconet clock: 0x%8.8x", piconet_clock);
+ print_field("Accuracy: 0x%4.4x", accuracy);
+}
+
static void mgmt_add_device_cmd(const void *data, uint16_t size)
{
uint8_t address_type = get_u8(data + 6);
@@ -10287,6 +10341,52 @@
mgmt_print_options("Missing options", missing_options);
}
+static void mgmt_set_external_configuration_cmd(const void *data, uint16_t size)
+{
+ uint8_t enable = get_u8(data);
+
+ mgmt_print_enable("Configuration", enable);
+}
+
+static void mgmt_set_public_address_cmd(const void *data, uint16_t size)
+{
+ print_addr_resolve("Address", data, 0x00, false);
+}
+
+static void mgmt_new_options_rsp(const void *data, uint16_t size)
+{
+ uint32_t missing_options = get_le32(data);
+
+ mgmt_print_options("Missing options", missing_options);
+}
+
+static void mgmt_start_service_discovery_cmd(const void *data, uint16_t size)
+{
+ uint8_t type = get_u8(data);
+ int8_t rssi = get_s8(data + 1);
+ uint16_t num_uuids = get_le16(data + 2);
+ int i;
+
+ mgmt_print_address_type(type);
+ print_rssi(rssi);
+ print_field("UUIDs: %u", num_uuids);
+
+ if (size - 4 != num_uuids * 16) {
+ packet_hexdump(data + 4, size - 4);
+ return;
+ }
+
+ for (i = 0; i < num_uuids; i++)
+ mgmt_print_uuid(data + 4 + (i * 16));
+}
+
+static void mgmt_start_service_discovery_rsp(const void *data, uint16_t size)
+{
+ uint8_t type = get_u8(data);
+
+ mgmt_print_address_type(type);
+}
+
static void mgmt_read_ext_index_list_rsp(const void *data, uint16_t size)
{
uint16_t num_controllers = get_le16(data);
@@ -10540,8 +10640,12 @@
{ 0x002a, "Set BR/EDR",
mgmt_set_bredr_cmd, 1, true,
mgmt_new_settings_rsp, 4, true },
- { 0x002b, "Set Static Address" },
- { 0x002c, "Set Scan Parameters" },
+ { 0x002b, "Set Static Address",
+ mgmt_set_static_address_cmd, 6, true,
+ mgmt_new_settings_rsp, 4, true },
+ { 0x002c, "Set Scan Parameters",
+ mgmt_set_scan_parameters_cmd, 4, true,
+ mgmt_null_rsp, 0, true },
{ 0x002d, "Set Secure Connections",
mgmt_set_secure_connections_cmd, 1, true,
mgmt_new_settings_rsp, 4, true },
@@ -10554,8 +10658,12 @@
{ 0x0030, "Load Identity Resolving Keys",
mgmt_load_identity_resolving_keys_cmd, 2, false,
mgmt_null_rsp, 0, true },
- { 0x0031, "Get Connection Information" },
- { 0x0032, "Get Clock Information" },
+ { 0x0031, "Get Connection Information",
+ mgmt_get_connection_information_cmd, 7, true,
+ mgmt_get_connection_information_rsp, 10, true },
+ { 0x0032, "Get Clock Information",
+ mgmt_get_clock_information_cmd, 7, true,
+ mgmt_get_clock_information_rsp, 17, true },
{ 0x0033, "Add Device",
mgmt_add_device_cmd, 8, true,
mgmt_add_device_rsp, 7, true },
@@ -10569,9 +10677,15 @@
{ 0x0037, "Read Controller Configuration Information",
mgmt_null_cmd, 0, true,
mgmt_read_controller_conf_info_rsp, 10, true },
- { 0x0038, "Set External Configuration" },
- { 0x0039, "Set Public Address" },
- { 0x003a, "Start Service Discovery" },
+ { 0x0038, "Set External Configuration",
+ mgmt_set_external_configuration_cmd, 1, true,
+ mgmt_new_options_rsp, 4, true },
+ { 0x0039, "Set Public Address",
+ mgmt_set_public_address_cmd, 6, true,
+ mgmt_new_options_rsp, 4, true },
+ { 0x003a, "Start Service Discovery",
+ mgmt_start_service_discovery_cmd, 3, false,
+ mgmt_start_service_discovery_rsp, 1, true },
{ 0x003b, "Read Local Out Of Band Extended Data",
mgmt_read_local_oob_ext_data_cmd, 1, true },
{ 0x003c, "Read Extended Controller Index List",