diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c
index 663879a..90dfa35 100644
--- a/tools/mgmt-tester.c
+++ b/tools/mgmt-tester.c
const void * (*expect_func)(uint16_t *len);
uint32_t expect_settings_set;
uint32_t expect_settings_unset;
+ uint32_t expect_settings_spontaneous;
uint16_t expect_alt_ev;
const void *expect_alt_ev_param;
bool (*verify_alt_ev_func)(const void *param, uint16_t length);
static const uint8_t set_discoverable_on_param[] = { 0x01, 0x00, 0x00 };
static const uint8_t set_discoverable_timeout_param[] = { 0x01, 0x0a, 0x00 };
+static const uint8_t set_discoverable_timeout_1_param[] = { 0x01, 0x01, 0x00 };
static const uint8_t set_discoverable_invalid_param[] = { 0x02, 0x00, 0x00 };
static const uint8_t set_discoverable_off_param[] = { 0x00, 0x00, 0x00 };
static const uint8_t set_discoverable_offtimeout_param[] = { 0x00, 0x01, 0x00 };
.expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
};
+static const struct generic_data set_discoverable_on_timeout_success_test_1 = {
+ .setup_settings = settings_powered_connectable,
+ .send_opcode = MGMT_OP_SET_DISCOVERABLE,
+ .send_param = set_discoverable_timeout_param,
+ .send_len = sizeof(set_discoverable_timeout_param),
+ .expect_status = MGMT_STATUS_SUCCESS,
+ .expect_param = set_discoverable_on_settings_param_2,
+ .expect_len = sizeof(set_discoverable_on_settings_param_2),
+ .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
+ .expect_hci_param = set_discoverable_on_scan_enable_param,
+ .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
+};
+
+static const struct generic_data set_discoverable_on_timeout_success_test_2 = {
+ .setup_settings = settings_powered_connectable,
+ .send_opcode = MGMT_OP_SET_DISCOVERABLE,
+ .send_param = set_discoverable_timeout_1_param,
+ .send_len = sizeof(set_discoverable_timeout_1_param),
+ .expect_status = MGMT_STATUS_SUCCESS,
+ .expect_settings_set = MGMT_SETTING_DISCOVERABLE,
+ .expect_settings_spontaneous = MGMT_SETTING_POWERED |
+ MGMT_SETTING_CONNECTABLE |
+ MGMT_SETTING_BREDR,
+ .expect_param = set_discoverable_on_settings_param_2,
+ .expect_len = sizeof(set_discoverable_on_settings_param_2),
+ .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
+ .expect_hci_param = set_discoverable_on_scan_enable_param,
+ .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
+};
+
static uint8_t set_discov_on_le_param[] = { 0x0b, 0x06, 0x00, 0x00 };
static uint8_t set_discov_adv_data[32] = { 0x06, 0x02, 0x01, 0x06,
0x02, 0x0a, };
const void *param, void *user_data)
{
struct test_data *data = tester_get_data();
+ const struct generic_data *test = data->test_data;
+ uint32_t settings;
- tester_print("New settings event received");
+ if (length != 4) {
+ tester_warn("Invalid parameter size for new settings event");
+ tester_test_failed();
+ return;
+ }
+
+ settings = get_le32(param);
+ tester_print("New settings 0x%08x received (local)", settings);
mgmt_unregister(data->mgmt, data->mgmt_settings_id);
- tester_test_failed();
+ if (!test->expect_settings_spontaneous) {
+ tester_test_failed();
+ return;
+ }
+
+ if (settings == test->expect_settings_spontaneous)
+ test_condition_complete(data);
}
static void command_generic_new_settings_alt(uint16_t index, uint16_t length,
index = test->send_index_none ? MGMT_INDEX_NONE : data->mgmt_index;
- if (test->expect_settings_set || test->expect_settings_unset) {
+ if (test->expect_settings_set || test->expect_settings_unset ||
+ test->expect_settings_spontaneous) {
tester_print("Registering new settings notification");
id = mgmt_register(data->mgmt, MGMT_EV_NEW_SETTINGS, index,
command_generic_new_settings_alt, NULL, NULL);
data->mgmt_alt_settings_id = id;
test_add_condition(data);
+
+ if (test->expect_settings_spontaneous)
+ test_add_condition(data);
}
if (test->expect_alt_ev) {
test_bredrle("Set discoverable on - Success 2",
&set_discoverable_on_success_test_2,
NULL, test_command_generic);
+ test_bredrle("Set discoverable on timeout - Success 1",
+ &set_discoverable_on_timeout_success_test_1,
+ NULL, test_command_generic);
+ test_bredrle_full("Set discoverable on timeout - Success 2 (Timeout)",
+ &set_discoverable_on_timeout_success_test_2,
+ NULL, test_command_generic, 8);
test_le("Set discoverable on (LE) - Success 1",
&set_discov_on_le_success_1,
NULL, test_command_generic);