diff --git a/apps/bttester/src/bttester.h b/apps/bttester/src/bttester.h index 4a8fc4714..4bf748577 100644 --- a/apps/bttester/src/bttester.h +++ b/apps/bttester/src/bttester.h @@ -320,6 +320,11 @@ struct gap_set_mitm_cmd { uint8_t mitm; } __packed; +#define GAP_SET_FILTER_ACCEPT_LIST 0x1c +struct gap_set_filter_accept_list_cmd { + uint8_t list_len; + ble_addr_t addrs[]; +} __packed; /* events */ #define GAP_EV_NEW_SETTINGS 0x80 struct gap_new_settings_ev { diff --git a/apps/bttester/src/gap.c b/apps/bttester/src/gap.c index 75adeb9fc..ce6cf33db 100644 --- a/apps/bttester/src/gap.c +++ b/apps/bttester/src/gap.c @@ -1230,10 +1230,15 @@ static int gap_event_cb(struct ble_gap_event *event, void *arg) static void connect(const uint8_t *data, uint16_t len) { uint8_t status = BTP_STATUS_SUCCESS; + ble_addr_t *addr = (ble_addr_t *) data; SYS_LOG_DBG(""); - if (ble_gap_connect(own_addr_type, (ble_addr_t *) data, 0, + if (ble_addr_cmp(BLE_ADDR_ANY, addr) == 0) { + addr = NULL; + } + + if (ble_gap_connect(own_addr_type, addr, 0, &dflt_conn_params, gap_event_cb, NULL)) { status = BTP_STATUS_FAILED; } @@ -1574,6 +1579,27 @@ static void set_mitm(const uint8_t *data, uint16_t len) CONTROLLER_INDEX, BTP_STATUS_SUCCESS); } +static void set_filter_accept_list(const uint8_t *data, uint16_t len) +{ + uint8_t status = BTP_STATUS_SUCCESS; + struct gap_set_filter_accept_list_cmd *tmp = + (struct gap_set_filter_accept_list_cmd *) data; + + SYS_LOG_DBG(""); + + /* + * Check if the nb of bytes received matches the len of addrs list. + * Then set the filter accept list. + */ + if (((len - sizeof(tmp->list_len))/sizeof(ble_addr_t) != + tmp->list_len) || ble_gap_wl_set(tmp->addrs, tmp->list_len)) { + status = BTP_STATUS_FAILED; + } + + tester_rsp(BTP_SERVICE_ID_GAP, GAP_SET_FILTER_ACCEPT_LIST, + CONTROLLER_INDEX, status); +} + void tester_handle_gap(uint8_t opcode, uint8_t index, uint8_t *data, uint16_t len) { @@ -1665,6 +1691,9 @@ void tester_handle_gap(uint8_t opcode, uint8_t index, uint8_t *data, case GAP_SET_MITM: set_mitm(data, len); return; + case GAP_SET_FILTER_ACCEPT_LIST: + set_filter_accept_list(data, len); + return; default: tester_rsp(BTP_SERVICE_ID_GAP, opcode, index, BTP_STATUS_UNKNOWN_CMD);