You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by GitBox <gi...@apache.org> on 2022/04/19 05:28:32 UTC

[GitHub] [mynewt-nimble] utzig commented on pull request #1091: apps/bttester: add lost bond event

utzig commented on PR #1091:
URL: https://github.com/apache/mynewt-nimble/pull/1091#issuecomment-1102084833

   
   <!-- style-bot -->
   
   ## Style check summary
   
   ### Our coding style is [here!](https://github.com/apache/mynewt-core/blob/master/CODING_STANDARDS.md)
   
   
   #### apps/bttester/src/bttester.h
   <details>
   
   ```diff
   @@ -399,20 +356,63 @@
        uint16_t supervision_timeout;
    } __packed;
    
   -#define GAP_EV_SEC_LEVEL_CHANGED	0x89
   +#define GAP_EV_DEVICE_DISCONNECTED  0x83
   +struct gap_device_disconnected_ev {
   +    uint8_t address_type;
   +    uint8_t address[6];
   +} __packed;
   +
   +#define GAP_EV_PASSKEY_DISPLAY      0x84
   +struct gap_passkey_display_ev {
   +    uint8_t address_type;
   +    uint8_t address[6];
   +    uint32_t passkey;
   +} __packed;
   +
   +#define GAP_EV_PASSKEY_ENTRY_REQ    0x85
   +struct gap_passkey_entry_req_ev {
   +    uint8_t address_type;
   +    uint8_t address[6];
   +} __packed;
   +
   +#define GAP_EV_PASSKEY_CONFIRM_REQ  0x86
   +struct gap_passkey_confirm_req_ev {
   +    uint8_t address_type;
   +    uint8_t address[6];
   +    uint32_t passkey;
   +} __packed;
   +
   +#define GAP_EV_IDENTITY_RESOLVED    0x87
   +struct gap_identity_resolved_ev {
   +    uint8_t address_type;
   +    uint8_t address[6];
   +    uint8_t identity_address_type;
   +    uint8_t identity_address[6];
   +} __packed;
   +
   +#define GAP_EV_CONN_PARAM_UPDATE    0x88
   +struct gap_conn_param_update_ev {
   +    uint8_t address_type;
   +    uint8_t address[6];
   +    uint16_t conn_itvl;
   +    uint16_t conn_latency;
   +    uint16_t supervision_timeout;
   +} __packed;
   +
   +#define GAP_EV_SEC_LEVEL_CHANGED    0x89
    struct gap_sec_level_changed_ev {
        uint8_t address_type;
        uint8_t address[6];
        uint8_t level;
    } __packed;
    
   -#define GAP_EV_PAIRING_CONSENT_REQ	0x8a
   +#define GAP_EV_PAIRING_CONSENT_REQ  0x8a
    struct gap_pairing_consent_req_ev {
        uint8_t address_type;
        uint8_t address[6];
    } __packed;
    
   -#define GAP_EV_BOND_LOST	0x8b
   +#define GAP_EV_BOND_LOST    0x8b
    struct gap_bond_lost_ev {
        uint8_t address_type;
        uint8_t address[6];
   ```
   
   </details>
   
   #### apps/bttester/src/gap.c
   <details>
   
   ```diff
   @@ -1033,736 +1064,764 @@
        tester_send(BTP_SERVICE_ID_GAP, GAP_EV_BOND_LOST, CONTROLLER_INDEX, (uint8_t *) &ev, sizeof(ev));
    }
    
   -static void print_bytes(const uint8_t *bytes, int len)
   -{
   -	int i;
   -
   -	for (i = 0; i < len; i++) {
   -		console_printf("%s0x%02x", i != 0 ? ":" : "", bytes[i]);
   -	}
   -}
   -
   -static void print_mbuf(const struct os_mbuf *om)
   -{
   -	int colon;
   -
   -	colon = 0;
   -	while (om != NULL) {
   -		if (colon) {
   -			console_printf(":");
   -		} else {
   -			colon = 1;
   -		}
   -		print_bytes(om->om_data, om->om_len);
   -		om = SLIST_NEXT(om, om_next);
   -	}
   -}
   -
   -static void print_addr(const void *addr)
   -{
   -	const uint8_t *u8p;
   -
   -	u8p = addr;
   -	console_printf("%02x:%02x:%02x:%02x:%02x:%02x",
   -		       u8p[5], u8p[4], u8p[3], u8p[2], u8p[1], u8p[0]);
   -}
   -
   -static void print_conn_desc(const struct ble_gap_conn_desc *desc)
   -{
   -	console_printf("handle=%d our_ota_addr_type=%d our_ota_addr=",
   -		       desc->conn_handle, desc->our_ota_addr.type);
   -	print_addr(desc->our_ota_addr.val);
   -	console_printf(" our_id_addr_type=%d our_id_addr=",
   -		       desc->our_id_addr.type);
   -	print_addr(desc->our_id_addr.val);
   -	console_printf(" peer_ota_addr_type=%d peer_ota_addr=",
   -		       desc->peer_ota_addr.type);
   -	print_addr(desc->peer_ota_addr.val);
   -	console_printf(" peer_id_addr_type=%d peer_id_addr=",
   -		       desc->peer_id_addr.type);
   -	print_addr(desc->peer_id_addr.val);
   -	console_printf(" conn_itvl=%d conn_latency=%d supervision_timeout=%d "
   -		       "key_sz=%d encrypted=%d authenticated=%d bonded=%d\n",
   -		       desc->conn_itvl, desc->conn_latency,
   -		       desc->supervision_timeout,
   -		       desc->sec_state.key_size,
   -		       desc->sec_state.encrypted,
   -		       desc->sec_state.authenticated,
   -		       desc->sec_state.bonded);
   -}
   -
   -static void adv_complete(void)
   -{
   -	struct gap_new_settings_ev ev;
   -
   -	current_settings &= ~BIT(GAP_SETTINGS_ADVERTISING);
   -	ev.current_settings = sys_cpu_to_le32(current_settings);
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_EV_NEW_SETTINGS, CONTROLLER_INDEX,
   -		    (uint8_t *) &ev, sizeof(ev));
   -}
   -
   -static int gap_event_cb(struct ble_gap_event *event, void *arg)
   -{
   -	struct ble_gap_conn_desc desc;
   -	int rc;
   -
   -	switch (event->type) {
   -	case BLE_GAP_EVENT_ADV_COMPLETE:
   -		console_printf("advertising complete; reason=%d\n",
   -			       event->adv_complete.reason);
   -		break;
   -	case BLE_GAP_EVENT_CONNECT:
   -		console_printf("connection %s; status=%d ",
   -			       event->connect.status == 0 ? "established" : "failed",
   -			       event->connect.status);
   -		if (event->connect.status == 0) {
   -			rc = ble_gap_conn_find(event->connect.conn_handle, &desc);
   -			assert(rc == 0);
   -			print_conn_desc(&desc);
   -		}
   -
   -		if (desc.role == BLE_GAP_ROLE_SLAVE) {
   -			adv_complete();
   -		}
   -
   -		le_connected(event->connect.conn_handle,
   -			     event->connect.status);
   -		break;
   -	case BLE_GAP_EVENT_DISCONNECT:
   -		console_printf("disconnect; reason=%d ", event->disconnect.reason);
   -		print_conn_desc(&event->disconnect.conn);
   -		le_disconnected(&event->disconnect.conn,
   -				event->disconnect.reason);
   -		break;
   -	case BLE_GAP_EVENT_ENC_CHANGE:
   -		console_printf("encryption change event; status=%d ", event->enc_change.status);
   -		rc = ble_gap_conn_find(event->enc_change.conn_handle, &desc);
   -		assert(rc == 0);
   -		print_conn_desc(&desc);
   -		le_encryption_changed(&desc);
   -		if (event->enc_change.status == BLE_HS_HCI_ERR(BLE_ERR_PINKEY_MISSING)) {
   -		    bond_lost(event->enc_change.conn_handle);
   -		}
   -		break;
   -	case BLE_GAP_EVENT_PASSKEY_ACTION:
   -		console_printf("passkey action event; action=%d",
   -			       event->passkey.params.action);
   -		if (event->passkey.params.action == BLE_SM_IOACT_NUMCMP) {
   -			console_printf(" numcmp=%lu",
   -				       (unsigned long)event->passkey.params.numcmp);
   -		}
   -		console_printf("\n");
   -		le_passkey_action(event->passkey.conn_handle,
   -				  &event->passkey.params);
   -		break;
   -	case BLE_GAP_EVENT_IDENTITY_RESOLVED:
   -		console_printf("identity resolved ");
   -		rc = ble_gap_conn_find(event->identity_resolved.conn_handle, &desc);
   -		assert(rc == 0);
   -		print_conn_desc(&desc);
   -		le_identity_resolved(event->identity_resolved.conn_handle);
   -		break;
   -	case BLE_GAP_EVENT_NOTIFY_RX:
   -		console_printf("notification rx event; attr_handle=%d indication=%d "
   -			       "len=%d data=",
   -			       event->notify_rx.attr_handle,
   -			       event->notify_rx.indication,
   -			       OS_MBUF_PKTLEN(event->notify_rx.om));
   -
   -		print_mbuf(event->notify_rx.om);
   -		console_printf("\n");
   -		tester_gattc_notify_rx_ev(event->notify_rx.conn_handle,
   -					 event->notify_rx.attr_handle,
   -					 event->notify_rx.indication,
   -					 event->notify_rx.om);
   -		break;
   -	case BLE_GAP_EVENT_SUBSCRIBE:
   -		console_printf("subscribe event; conn_handle=%d attr_handle=%d "
   -			       "reason=%d prevn=%d curn=%d previ=%d curi=%d\n",
   -			       event->subscribe.conn_handle,
   -			       event->subscribe.attr_handle,
   -			       event->subscribe.reason,
   -			       event->subscribe.prev_notify,
   -			       event->subscribe.cur_notify,
   -			       event->subscribe.prev_indicate,
   -			       event->subscribe.cur_indicate);
   -		tester_gatt_subscribe_ev(event->subscribe.conn_handle,
   -					 event->subscribe.attr_handle,
   -					 event->subscribe.reason,
   -					 event->subscribe.prev_notify,
   -					 event->subscribe.cur_notify,
   -					 event->subscribe.prev_indicate,
   -					 event->subscribe.cur_indicate);
   -		break;
   -	case BLE_GAP_EVENT_REPEAT_PAIRING:
   -		console_printf("repeat pairing event; conn_handle=%d "
   -			       "cur_key_sz=%d cur_auth=%d cur_sc=%d "
   -			       "new_key_sz=%d new_auth=%d new_sc=%d "
   -			       "new_bonding=%d\n",
   -			event->repeat_pairing.conn_handle,
   -			event->repeat_pairing.cur_key_size,
   -			event->repeat_pairing.cur_authenticated,
   -			event->repeat_pairing.cur_sc,
   -			event->repeat_pairing.new_key_size,
   -			event->repeat_pairing.new_authenticated,
   -			event->repeat_pairing.new_sc,
   -			event->repeat_pairing.new_bonding);
   -		rc = ble_gap_conn_find(event->repeat_pairing.conn_handle, &desc);
   -		assert(rc == 0);
   -		rc = ble_store_util_delete_peer(&desc.peer_id_addr);
   -		assert(rc == 0);
   -		bond_lost(event->repeat_pairing.conn_handle);
   -		return BLE_GAP_REPEAT_PAIRING_RETRY;
   -	case BLE_GAP_EVENT_CONN_UPDATE:
   -		console_printf("connection update event; status=%d ",
   -			       event->conn_update.status);
   -			rc = ble_gap_conn_find(event->conn_update.conn_handle, &desc);
   -			assert(rc == 0);
   -			print_conn_desc(&desc);
   -			le_conn_param_update(&desc);
   -		break;
   -	case BLE_GAP_EVENT_CONN_UPDATE_REQ:
   -		console_printf("connection update request event; "
   -			       "conn_handle=%d itvl_min=%d itvl_max=%d "
   -			       "latency=%d supervision_timoeut=%d "
   -			       "min_ce_len=%d max_ce_len=%d\n",
   -			       event->conn_update_req.conn_handle,
   -			       event->conn_update_req.peer_params->itvl_min,
   -			       event->conn_update_req.peer_params->itvl_max,
   -			       event->conn_update_req.peer_params->latency,
   -			       event->conn_update_req.peer_params->supervision_timeout,
   -			       event->conn_update_req.peer_params->min_ce_len,
   -			       event->conn_update_req.peer_params->max_ce_len);
   -
   -		*event->conn_update_req.self_params =
   -			*event->conn_update_req.peer_params;
   -		break;
   -	default:
   -		break;
   -	}
   -
   -	return 0;
   -}
   -
   -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_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;
   -	}
   -
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_CONNECT, CONTROLLER_INDEX, status);
   -}
   -
   -static void disconnect(const uint8_t *data, uint16_t len)
   -{
   -	struct ble_gap_conn_desc desc;
   -	uint8_t status;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = gap_conn_find_by_addr((ble_addr_t *)data, &desc);
   -	if (rc) {
   -		status = BTP_STATUS_FAILED;
   -		goto rsp;
   -	}
   -
   -	if (ble_gap_terminate(desc.conn_handle, BLE_ERR_REM_USER_CONN_TERM)) {
   -		status = BTP_STATUS_FAILED;
   -	} else {
   -		status = BTP_STATUS_SUCCESS;
   -	}
   +static void
   +print_bytes(const uint8_t *bytes, int len)
   +{
   +    int i;
   +
   +    for (i = 0; i < len; i++) {
   +        console_printf("%s0x%02x", i != 0 ? ":" : "", bytes[i]);
   +    }
   +}
   +
   +static void
   +print_mbuf(const struct os_mbuf *om)
   +{
   +    int colon;
   +
   +    colon = 0;
   +    while (om != NULL) {
   +        if (colon) {
   +            console_printf(":");
   +        } else {
   +            colon = 1;
   +        }
   +        print_bytes(om->om_data, om->om_len);
   +        om = SLIST_NEXT(om, om_next);
   +    }
   +}
   +
   +static void
   +print_addr(const void *addr)
   +{
   +    const uint8_t *u8p;
   +
   +    u8p = addr;
   +    console_printf("%02x:%02x:%02x:%02x:%02x:%02x",
   +               u8p[5], u8p[4], u8p[3], u8p[2], u8p[1], u8p[0]);
   +}
   +
   +static void
   +print_conn_desc(const struct ble_gap_conn_desc *desc)
   +{
   +    console_printf("handle=%d our_ota_addr_type=%d our_ota_addr=",
   +               desc->conn_handle, desc->our_ota_addr.type);
   +    print_addr(desc->our_ota_addr.val);
   +    console_printf(" our_id_addr_type=%d our_id_addr=",
   +               desc->our_id_addr.type);
   +    print_addr(desc->our_id_addr.val);
   +    console_printf(" peer_ota_addr_type=%d peer_ota_addr=",
   +               desc->peer_ota_addr.type);
   +    print_addr(desc->peer_ota_addr.val);
   +    console_printf(" peer_id_addr_type=%d peer_id_addr=",
   +               desc->peer_id_addr.type);
   +    print_addr(desc->peer_id_addr.val);
   +    console_printf(" conn_itvl=%d conn_latency=%d supervision_timeout=%d "
   +               "key_sz=%d encrypted=%d authenticated=%d bonded=%d\n",
   +               desc->conn_itvl, desc->conn_latency,
   +               desc->supervision_timeout,
   +               desc->sec_state.key_size,
   +               desc->sec_state.encrypted,
   +               desc->sec_state.authenticated,
   +               desc->sec_state.bonded);
   +}
   +
   +static void
   +adv_complete(void)
   +{
   +    struct gap_new_settings_ev ev;
   +
   +    current_settings &= ~BIT(GAP_SETTINGS_ADVERTISING);
   +    ev.current_settings = sys_cpu_to_le32(current_settings);
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_EV_NEW_SETTINGS, CONTROLLER_INDEX,
   +                (uint8_t *) &ev, sizeof(ev));
   +}
   +
   +static int
   +gap_event_cb(struct ble_gap_event *event, void *arg)
   +{
   +    struct ble_gap_conn_desc desc;
   +    int rc;
   +
   +    switch (event->type) {
   +    case BLE_GAP_EVENT_ADV_COMPLETE:
   +        console_printf("advertising complete; reason=%d\n",
   +                   event->adv_complete.reason);
   +        break;
   +    case BLE_GAP_EVENT_CONNECT:
   +        console_printf("connection %s; status=%d ",
   +                   event->connect.status == 0 ? "established" : "failed",
   +                   event->connect.status);
   +        if (event->connect.status == 0) {
   +            rc = ble_gap_conn_find(event->connect.conn_handle, &desc);
   +            assert(rc == 0);
   +            print_conn_desc(&desc);
   +        }
   +
   +        if (desc.role == BLE_GAP_ROLE_SLAVE) {
   +            adv_complete();
   +        }
   +
   +        le_connected(event->connect.conn_handle,
   +                 event->connect.status);
   +        break;
   +    case BLE_GAP_EVENT_DISCONNECT:
   +        console_printf("disconnect; reason=%d ", event->disconnect.reason);
   +        print_conn_desc(&event->disconnect.conn);
   +        le_disconnected(&event->disconnect.conn,
   +                event->disconnect.reason);
   +        break;
   +    case BLE_GAP_EVENT_ENC_CHANGE:
   +        console_printf("encryption change event; status=%d ", event->enc_change.status);
   +        rc = ble_gap_conn_find(event->enc_change.conn_handle, &desc);
   +        assert(rc == 0);
   +        print_conn_desc(&desc);
   +        le_encryption_changed(&desc);
   +        if (event->enc_change.status == BLE_HS_HCI_ERR(BLE_ERR_PINKEY_MISSING)) {
   +            bond_lost(event->enc_change.conn_handle);
   +        }
   +        break;
   +    case BLE_GAP_EVENT_PASSKEY_ACTION:
   +        console_printf("passkey action event; action=%d",
   +                   event->passkey.params.action);
   +        if (event->passkey.params.action == BLE_SM_IOACT_NUMCMP) {
   +            console_printf(" numcmp=%lu",
   +                           (unsigned long)event->passkey.params.numcmp);
   +        }
   +        console_printf("\n");
   +        le_passkey_action(event->passkey.conn_handle,
   +                  &event->passkey.params);
   +        break;
   +    case BLE_GAP_EVENT_IDENTITY_RESOLVED:
   +        console_printf("identity resolved ");
   +        rc = ble_gap_conn_find(event->identity_resolved.conn_handle, &desc);
   +        assert(rc == 0);
   +        print_conn_desc(&desc);
   +        le_identity_resolved(event->identity_resolved.conn_handle);
   +        break;
   +    case BLE_GAP_EVENT_NOTIFY_RX:
   +        console_printf("notification rx event; attr_handle=%d indication=%d "
   +                   "len=%d data=",
   +                   event->notify_rx.attr_handle,
   +                   event->notify_rx.indication,
   +                   OS_MBUF_PKTLEN(event->notify_rx.om));
   +
   +        print_mbuf(event->notify_rx.om);
   +        console_printf("\n");
   +        tester_gattc_notify_rx_ev(event->notify_rx.conn_handle,
   +                     event->notify_rx.attr_handle,
   +                     event->notify_rx.indication,
   +                     event->notify_rx.om);
   +        break;
   +    case BLE_GAP_EVENT_SUBSCRIBE:
   +        console_printf("subscribe event; conn_handle=%d attr_handle=%d "
   +                   "reason=%d prevn=%d curn=%d previ=%d curi=%d\n",
   +                   event->subscribe.conn_handle,
   +                   event->subscribe.attr_handle,
   +                   event->subscribe.reason,
   +                   event->subscribe.prev_notify,
   +                   event->subscribe.cur_notify,
   +                   event->subscribe.prev_indicate,
   +                   event->subscribe.cur_indicate);
   +        tester_gatt_subscribe_ev(event->subscribe.conn_handle,
   +                     event->subscribe.attr_handle,
   +                     event->subscribe.reason,
   +                     event->subscribe.prev_notify,
   +                     event->subscribe.cur_notify,
   +                     event->subscribe.prev_indicate,
   +                     event->subscribe.cur_indicate);
   +        break;
   +    case BLE_GAP_EVENT_REPEAT_PAIRING:
   +        console_printf("repeat pairing event; conn_handle=%d "
   +                   "cur_key_sz=%d cur_auth=%d cur_sc=%d "
   +                   "new_key_sz=%d new_auth=%d new_sc=%d "
   +                   "new_bonding=%d\n",
   +            event->repeat_pairing.conn_handle,
   +            event->repeat_pairing.cur_key_size,
   +            event->repeat_pairing.cur_authenticated,
   +            event->repeat_pairing.cur_sc,
   +            event->repeat_pairing.new_key_size,
   +            event->repeat_pairing.new_authenticated,
   +            event->repeat_pairing.new_sc,
   +            event->repeat_pairing.new_bonding);
   +        rc = ble_gap_conn_find(event->repeat_pairing.conn_handle, &desc);
   +        assert(rc == 0);
   +        rc = ble_store_util_delete_peer(&desc.peer_id_addr);
   +        assert(rc == 0);
   +        bond_lost(event->repeat_pairing.conn_handle);
   +        return BLE_GAP_REPEAT_PAIRING_RETRY;
   +    case BLE_GAP_EVENT_CONN_UPDATE:
   +        console_printf("connection update event; status=%d ",
   +                   event->conn_update.status);
   +        rc = ble_gap_conn_find(event->conn_update.conn_handle, &desc);
   +        assert(rc == 0);
   +        print_conn_desc(&desc);
   +        le_conn_param_update(&desc);
   +        break;
   +    case BLE_GAP_EVENT_CONN_UPDATE_REQ:
   +        console_printf("connection update request event; "
   +                   "conn_handle=%d itvl_min=%d itvl_max=%d "
   +                   "latency=%d supervision_timoeut=%d "
   +                   "min_ce_len=%d max_ce_len=%d\n",
   +                   event->conn_update_req.conn_handle,
   +                   event->conn_update_req.peer_params->itvl_min,
   +                   event->conn_update_req.peer_params->itvl_max,
   +                   event->conn_update_req.peer_params->latency,
   +                   event->conn_update_req.peer_params->supervision_timeout,
   +                   event->conn_update_req.peer_params->min_ce_len,
   +                   event->conn_update_req.peer_params->max_ce_len);
   +
   +        *event->conn_update_req.self_params =
   +            *event->conn_update_req.peer_params;
   +        break;
   +    default:
   +        break;
   +    }
   +
   +    return 0;
   +}
   +
   +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_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;
   +    }
   +
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_CONNECT, CONTROLLER_INDEX, status);
   +}
   +
   +static void
   +disconnect(const uint8_t *data, uint16_t len)
   +{
   +    struct ble_gap_conn_desc desc;
   +    uint8_t status;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = gap_conn_find_by_addr((ble_addr_t *)data, &desc);
   +    if (rc) {
   +        status = BTP_STATUS_FAILED;
   +        goto rsp;
   +    }
   +
   +    if (ble_gap_terminate(desc.conn_handle, BLE_ERR_REM_USER_CONN_TERM)) {
   +        status = BTP_STATUS_FAILED;
   +    } else {
   +        status = BTP_STATUS_SUCCESS;
   +    }
    
    rsp:
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_DISCONNECT, CONTROLLER_INDEX,
   -		   status);
   -}
   -
   -static void set_io_cap(const uint8_t *data, uint16_t len)
   -{
   -	const struct gap_set_io_cap_cmd *cmd = (void *) data;
   -	uint8_t status;
   -
   -	SYS_LOG_DBG("");
   -
   -	switch (cmd->io_cap) {
   -	case GAP_IO_CAP_DISPLAY_ONLY:
   -		ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_DISP_ONLY;
   -		ble_hs_cfg.sm_mitm = 1;
   -		break;
   -	case GAP_IO_CAP_KEYBOARD_DISPLAY:
   -		ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_KEYBOARD_DISP;
   -		ble_hs_cfg.sm_mitm = 1;
   -		break;
   -	case GAP_IO_CAP_NO_INPUT_OUTPUT:
   -		ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_NO_IO;
   -		ble_hs_cfg.sm_mitm = 0;
   -		break;
   -	case GAP_IO_CAP_KEYBOARD_ONLY:
   -		ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_KEYBOARD_ONLY;
   -		ble_hs_cfg.sm_mitm = 1;
   -		break;
   -	case GAP_IO_CAP_DISPLAY_YESNO:
   -		ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_DISP_YES_NO;
   -		ble_hs_cfg.sm_mitm = 1;
   -		break;
   -	default:
   -		status = BTP_STATUS_FAILED;
   -		goto rsp;
   -	}
   -
   -	status = BTP_STATUS_SUCCESS;
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_DISCONNECT, CONTROLLER_INDEX,
   +           status);
   +}
   +
   +static void
   +set_io_cap(const uint8_t *data, uint16_t len)
   +{
   +    const struct gap_set_io_cap_cmd *cmd = (void *) data;
   +    uint8_t status;
   +
   +    SYS_LOG_DBG("");
   +
   +    switch (cmd->io_cap) {
   +    case GAP_IO_CAP_DISPLAY_ONLY:
   +        ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_DISP_ONLY;
   +        ble_hs_cfg.sm_mitm = 1;
   +        break;
   +    case GAP_IO_CAP_KEYBOARD_DISPLAY:
   +        ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_KEYBOARD_DISP;
   +        ble_hs_cfg.sm_mitm = 1;
   +        break;
   +    case GAP_IO_CAP_NO_INPUT_OUTPUT:
   +        ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_NO_IO;
   +        ble_hs_cfg.sm_mitm = 0;
   +        break;
   +    case GAP_IO_CAP_KEYBOARD_ONLY:
   +        ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_KEYBOARD_ONLY;
   +        ble_hs_cfg.sm_mitm = 1;
   +        break;
   +    case GAP_IO_CAP_DISPLAY_YESNO:
   +        ble_hs_cfg.sm_io_cap = BLE_SM_IO_CAP_DISP_YES_NO;
   +        ble_hs_cfg.sm_mitm = 1;
   +        break;
   +    default:
   +        status = BTP_STATUS_FAILED;
   +        goto rsp;
   +    }
   +
   +    status = BTP_STATUS_SUCCESS;
    
    rsp:
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_SET_IO_CAP, CONTROLLER_INDEX,
   -		   status);
   -}
   -
   -static void pair(const uint8_t *data, uint16_t len)
   -{
   -	struct ble_gap_conn_desc desc;
   -	uint8_t status;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = gap_conn_find_by_addr((ble_addr_t *)data, &desc);
   -	if (rc) {
   -		status = BTP_STATUS_FAILED;
   -		goto rsp;
   -	}
   -
   -	if (ble_gap_security_initiate(desc.conn_handle)) {
   -		status = BTP_STATUS_FAILED;
   -		goto rsp;
   -	}
   -
   -	status = BTP_STATUS_SUCCESS;
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_SET_IO_CAP, CONTROLLER_INDEX,
   +           status);
   +}
   +
   +static void
   +pair(const uint8_t *data, uint16_t len)
   +{
   +    struct ble_gap_conn_desc desc;
   +    uint8_t status;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = gap_conn_find_by_addr((ble_addr_t *)data, &desc);
   +    if (rc) {
   +        status = BTP_STATUS_FAILED;
   +        goto rsp;
   +    }
   +
   +    if (ble_gap_security_initiate(desc.conn_handle)) {
   +        status = BTP_STATUS_FAILED;
   +        goto rsp;
   +    }
   +
   +    status = BTP_STATUS_SUCCESS;
    
    rsp:
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_PAIR, CONTROLLER_INDEX, status);
   -}
   -
   -static void unpair(const uint8_t *data, uint16_t len)
   -{
   -	uint8_t status;
   -	int err;
   -
   -	SYS_LOG_DBG("");
   -
   -	err = ble_gap_unpair((ble_addr_t *) data);
   -	status = (uint8_t) (err != 0 ? BTP_STATUS_FAILED : BTP_STATUS_SUCCESS);
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_UNPAIR, CONTROLLER_INDEX, status);
   -}
   -
   -static void passkey_entry(const uint8_t *data, uint16_t len)
   -{
   -	const struct gap_passkey_entry_cmd *cmd = (void *) data;
   -	struct ble_gap_conn_desc desc;
   -	struct ble_sm_io pk;
   -	uint8_t status;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = gap_conn_find_by_addr((ble_addr_t *)data, &desc);
   -	if (rc) {
   -		status = BTP_STATUS_FAILED;
   -		goto rsp;
   -	}
   -
   -	pk.action = BLE_SM_IOACT_INPUT;
   -	pk.passkey = sys_le32_to_cpu(cmd->passkey);
   -
   -	rc = ble_sm_inject_io(desc.conn_handle, &pk);
   -	if (rc) {
   -		status = BTP_STATUS_FAILED;
   -		goto rsp;
   -	}
   -
   -	status = BTP_STATUS_SUCCESS;
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_PAIR, CONTROLLER_INDEX, status);
   +}
   +
   +static void
   +unpair(const uint8_t *data, uint16_t len)
   +{
   +    uint8_t status;
   +    int err;
   +
   +    SYS_LOG_DBG("");
   +
   +    err = ble_gap_unpair((ble_addr_t *) data);
   +    status = (uint8_t) (err != 0 ? BTP_STATUS_FAILED : BTP_STATUS_SUCCESS);
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_UNPAIR, CONTROLLER_INDEX, status);
   +}
   +
   +static void
   +passkey_entry(const uint8_t *data, uint16_t len)
   +{
   +    const struct gap_passkey_entry_cmd *cmd = (void *) data;
   +    struct ble_gap_conn_desc desc;
   +    struct ble_sm_io pk;
   +    uint8_t status;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = gap_conn_find_by_addr((ble_addr_t *)data, &desc);
   +    if (rc) {
   +        status = BTP_STATUS_FAILED;
   +        goto rsp;
   +    }
   +
   +    pk.action = BLE_SM_IOACT_INPUT;
   +    pk.passkey = sys_le32_to_cpu(cmd->passkey);
   +
   +    rc = ble_sm_inject_io(desc.conn_handle, &pk);
   +    if (rc) {
   +        status = BTP_STATUS_FAILED;
   +        goto rsp;
   +    }
   +
   +    status = BTP_STATUS_SUCCESS;
    
    rsp:
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_PASSKEY_ENTRY, CONTROLLER_INDEX,
   -		   status);
   -}
   -
   -static void passkey_confirm(const uint8_t *data, uint16_t len)
   -{
   -	const struct gap_passkey_confirm_cmd *cmd = (void *) data;
   -	struct ble_gap_conn_desc desc;
   -	struct ble_sm_io pk;
   -	uint8_t status;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = gap_conn_find_by_addr((ble_addr_t *)data, &desc);
   -	if (rc) {
   -		status = BTP_STATUS_FAILED;
   -		goto rsp;
   -	}
   -
   -	pk.action = BLE_SM_IOACT_NUMCMP;
   -	pk.numcmp_accept = cmd->match;
   -
   -	rc = ble_sm_inject_io(desc.conn_handle, &pk);
   -	if (rc) {
   -		console_printf("sm inject io failed");
   -		status = BTP_STATUS_FAILED;
   -		goto rsp;
   -	}
   -
   -	status = BTP_STATUS_SUCCESS;
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_PASSKEY_ENTRY, CONTROLLER_INDEX,
   +           status);
   +}
   +
   +static void
   +passkey_confirm(const uint8_t *data, uint16_t len)
   +{
   +    const struct gap_passkey_confirm_cmd *cmd = (void *) data;
   +    struct ble_gap_conn_desc desc;
   +    struct ble_sm_io pk;
   +    uint8_t status;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = gap_conn_find_by_addr((ble_addr_t *)data, &desc);
   +    if (rc) {
   +        status = BTP_STATUS_FAILED;
   +        goto rsp;
   +    }
   +
   +    pk.action = BLE_SM_IOACT_NUMCMP;
   +    pk.numcmp_accept = cmd->match;
   +
   +    rc = ble_sm_inject_io(desc.conn_handle, &pk);
   +    if (rc) {
   +        console_printf("sm inject io failed");
   +        status = BTP_STATUS_FAILED;
   +        goto rsp;
   +    }
   +
   +    status = BTP_STATUS_SUCCESS;
    
    rsp:
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_PASSKEY_CONFIRM, CONTROLLER_INDEX,
   -		   status);
   -}
   -
   -static void start_direct_adv(const uint8_t *data, uint16_t len)
   -{
   -	const struct gap_start_direct_adv_cmd *cmd = (void *) data;
   -	struct gap_start_advertising_rp rp;
   -	static struct ble_gap_adv_params adv_params = {
   -		.conn_mode = BLE_GAP_CONN_MODE_DIR,
   -	};
   -	int err;
   -
   -	SYS_LOG_DBG("");
   -
   -	adv_params.high_duty_cycle = cmd->high_duty;
   -
   -	err = ble_gap_adv_start(own_addr_type, (ble_addr_t *)data,
   -				BLE_HS_FOREVER, &adv_params,
   -				gap_event_cb, NULL);
   -	if (err) {
   -		SYS_LOG_ERR("Advertising failed: err %d", err);
   -		goto fail;
   -	}
   -
   -	current_settings |= BIT(GAP_SETTINGS_ADVERTISING);
   -	rp.current_settings = sys_cpu_to_le32(current_settings);
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_START_DIRECT_ADV, CONTROLLER_INDEX,
   -		    (uint8_t *) &rp, sizeof(rp));
   -	return;
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_PASSKEY_CONFIRM, CONTROLLER_INDEX,
   +           status);
   +}
   +
   +static void
   +start_direct_adv(const uint8_t *data, uint16_t len)
   +{
   +    const struct gap_start_direct_adv_cmd *cmd = (void *) data;
   +    struct gap_start_advertising_rp rp;
   +    static struct ble_gap_adv_params adv_params = {
   +        .conn_mode = BLE_GAP_CONN_MODE_DIR,
   +    };
   +    int err;
   +
   +    SYS_LOG_DBG("");
   +
   +    adv_params.high_duty_cycle = cmd->high_duty;
   +
   +    err = ble_gap_adv_start(own_addr_type, (ble_addr_t *)data,
   +                BLE_HS_FOREVER, &adv_params,
   +                gap_event_cb, NULL);
   +    if (err) {
   +        SYS_LOG_ERR("Advertising failed: err %d", err);
   +        goto fail;
   +    }
   +
   +    current_settings |= BIT(GAP_SETTINGS_ADVERTISING);
   +    rp.current_settings = sys_cpu_to_le32(current_settings);
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_START_DIRECT_ADV, CONTROLLER_INDEX,
   +                (uint8_t *) &rp, sizeof(rp));
   +    return;
    fail:
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_START_DIRECT_ADV, CONTROLLER_INDEX,
   -		   BTP_STATUS_FAILED);
   -}
   -
   -static void conn_param_update_cb(uint16_t conn_handle, int status, void *arg)
   -{
   -	console_printf("conn param update complete; conn_handle=%d status=%d\n",
   -		       conn_handle, status);
   -}
   -
   -static int conn_param_update_slave(uint16_t conn_handle,
   -				   const struct gap_conn_param_update_cmd *cmd)
   -{
   -	int rc;
   -	struct ble_l2cap_sig_update_params params;
   -
   -	params.itvl_min = cmd->conn_itvl_min;
   -	params.itvl_max = cmd->conn_itvl_max;
   -	params.slave_latency = cmd->conn_latency;
   -	params.timeout_multiplier = cmd->supervision_timeout;
   -
   -	rc = ble_l2cap_sig_update(conn_handle, &params,
   -				  conn_param_update_cb, NULL);
   -	if (rc) {
   -		SYS_LOG_ERR("Failed to send update params: rc=%d", rc);
   -	}
   -
   -	return 0;
   -}
   -
   -static int conn_param_update_master(uint16_t conn_handle,
   -				    const struct gap_conn_param_update_cmd *cmd)
   -{
   -	int rc;
   -	struct ble_gap_upd_params params;
   -
   -	params.itvl_min = cmd->conn_itvl_min;
   -	params.itvl_max = cmd->conn_itvl_max;
   -	params.latency = cmd->conn_latency;
   -	params.supervision_timeout = cmd->supervision_timeout;
   -	params.min_ce_len = 0;
   -	params.max_ce_len = 0;
   -	rc = ble_gap_update_params(conn_handle, &params);
   -	if (rc) {
   -		SYS_LOG_ERR("Failed to send update params: rc=%d", rc);
   -	}
   -
   -	return rc;
   -}
   -
   -static void conn_param_update(struct os_event *ev)
   -{
   -	struct ble_gap_conn_desc desc;
   -	int rc;
   -
   -	SYS_LOG_DBG("");
   -
   -	rc = gap_conn_find_by_addr((ble_addr_t *)&update_params, &desc);
   -	if (rc) {
   -		goto rsp;
   -	}
   -
   -	if ((desc.conn_itvl >= update_params.conn_itvl_min) &&
   -	    (desc.conn_itvl <= update_params.conn_itvl_max) &&
   -	    (desc.conn_latency == update_params.conn_latency) &&
   -	    (desc.supervision_timeout == update_params.supervision_timeout)) {
   -		goto rsp;
   -	}
   -
   -	if (desc.role == BLE_GAP_ROLE_MASTER) {
   -		rc = conn_param_update_master(desc.conn_handle, &update_params);
   -	} else {
   -		rc = conn_param_update_slave(desc.conn_handle, &update_params);
   -	}
   -
   -	if (rc == 0) {
   -		return;
   -	}
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_START_DIRECT_ADV, CONTROLLER_INDEX,
   +           BTP_STATUS_FAILED);
   +}
   +
   +static void
   +conn_param_update_cb(uint16_t conn_handle, int status, void *arg)
   +{
   +    console_printf("conn param update complete; conn_handle=%d status=%d\n",
   +               conn_handle, status);
   +}
   +
   +static int
   +conn_param_update_slave(uint16_t conn_handle,
   +                        const struct gap_conn_param_update_cmd *cmd)
   +{
   +    int rc;
   +    struct ble_l2cap_sig_update_params params;
   +
   +    params.itvl_min = cmd->conn_itvl_min;
   +    params.itvl_max = cmd->conn_itvl_max;
   +    params.slave_latency = cmd->conn_latency;
   +    params.timeout_multiplier = cmd->supervision_timeout;
   +
   +    rc = ble_l2cap_sig_update(conn_handle, &params,
   +                  conn_param_update_cb, NULL);
   +    if (rc) {
   +        SYS_LOG_ERR("Failed to send update params: rc=%d", rc);
   +    }
   +
   +    return 0;
   +}
   +
   +static int
   +conn_param_update_master(uint16_t conn_handle,
   +                         const struct gap_conn_param_update_cmd *cmd)
   +{
   +    int rc;
   +    struct ble_gap_upd_params params;
   +
   +    params.itvl_min = cmd->conn_itvl_min;
   +    params.itvl_max = cmd->conn_itvl_max;
   +    params.latency = cmd->conn_latency;
   +    params.supervision_timeout = cmd->supervision_timeout;
   +    params.min_ce_len = 0;
   +    params.max_ce_len = 0;
   +    rc = ble_gap_update_params(conn_handle, &params);
   +    if (rc) {
   +        SYS_LOG_ERR("Failed to send update params: rc=%d", rc);
   +    }
   +
   +    return rc;
   +}
   +
   +static void
   +conn_param_update(struct os_event *ev)
   +{
   +    struct ble_gap_conn_desc desc;
   +    int rc;
   +
   +    SYS_LOG_DBG("");
   +
   +    rc = gap_conn_find_by_addr((ble_addr_t *)&update_params, &desc);
   +    if (rc) {
   +        goto rsp;
   +    }
   +
   +    if ((desc.conn_itvl >= update_params.conn_itvl_min) &&
   +        (desc.conn_itvl <= update_params.conn_itvl_max) &&
   +        (desc.conn_latency == update_params.conn_latency) &&
   +        (desc.supervision_timeout == update_params.supervision_timeout)) {
   +        goto rsp;
   +    }
   +
   +    if (desc.role == BLE_GAP_ROLE_MASTER) {
   +        rc = conn_param_update_master(desc.conn_handle, &update_params);
   +    } else {
   +        rc = conn_param_update_slave(desc.conn_handle, &update_params);
   +    }
   +
   +    if (rc == 0) {
   +        return;
   +    }
    
    rsp:
   -	SYS_LOG_ERR("Conn param update fail; rc=%d", rc);
   -}
   -
   -static void conn_param_update_async(const uint8_t *data, uint16_t len)
   -{
   -	const struct gap_conn_param_update_cmd *cmd = (void *) data;
   -	update_params = *cmd;
   -
   -	os_callout_reset(&update_params_co, 0);
   -
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_CONN_PARAM_UPDATE, CONTROLLER_INDEX,
   -		   BTP_STATUS_SUCCESS);
   -}
   -
   -static void oob_legacy_set_data(const uint8_t *data, uint16_t len)
   -{
   -	const struct gap_oob_legacy_set_data_cmd *cmd = (void *) data;
   -
   -	ble_hs_cfg.sm_oob_data_flag = 1;
   -	memcpy(oob, cmd->oob_data, sizeof(oob));
   -
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_OOB_LEGACY_SET_DATA,
   -		   CONTROLLER_INDEX, BTP_STATUS_SUCCESS);
   -}
   -
   -static void oob_sc_get_local_data(const uint8_t *data, uint16_t len)
   -{
   -	struct gap_oob_sc_get_local_data_rp rp;
   -
   -	memcpy(rp.r, oob_data_local.r, 16);
   -	memcpy(rp.c, oob_data_local.c, 16);
   -
   -	tester_send(BTP_SERVICE_ID_GAP, GAP_OOB_SC_GET_LOCAL_DATA,
   -		    CONTROLLER_INDEX, (uint8_t *) &rp, sizeof(rp));
   -}
   -
   -static void oob_sc_set_remote_data(const uint8_t *data, uint16_t len)
   -{
   -	const struct gap_oob_sc_set_remote_data_cmd *cmd = (void *) data;
   -
   -	ble_hs_cfg.sm_oob_data_flag = 1;
   -	memcpy(oob_data_remote.r, cmd->r, 16);
   -	memcpy(oob_data_remote.c, cmd->c, 16);
   -
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_OOB_SC_SET_REMOTE_DATA,
   -		   CONTROLLER_INDEX, BTP_STATUS_SUCCESS);
   -}
   -
   -static void set_mitm(const uint8_t *data, uint16_t len)
   -{
   -	const struct gap_set_mitm_cmd *cmd = (void *) data;
   -
   -	ble_hs_cfg.sm_mitm = cmd->mitm;
   -
   -	tester_rsp(BTP_SERVICE_ID_GAP, GAP_SET_MITM,
   -		   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)
   -{
   -	switch (opcode) {
   -	case GAP_READ_SUPPORTED_COMMANDS:
   -	case GAP_READ_CONTROLLER_INDEX_LIST:
   -		if (index != BTP_INDEX_NONE){
   -			tester_rsp(BTP_SERVICE_ID_GAP, opcode, index,
   -				   BTP_STATUS_FAILED);
   -			return;
   -		}
   -		break;
   -	default:
   -		if (index != CONTROLLER_INDEX){
   -			tester_rsp(BTP_SERVICE_ID_GAP, opcode, index,
   -				   BTP_STATUS_FAILED);
   -			return;
   -		}
   -		break;
   -	}
   -
   -	switch (opcode) {
   -	case GAP_READ_SUPPORTED_COMMANDS:
   -		supported_commands(data, len);
   -		return;
   -	case GAP_READ_CONTROLLER_INDEX_LIST:
   -		controller_index_list(data, len);
   -		return;
   -	case GAP_READ_CONTROLLER_INFO:
   -		controller_info(data, len);
   -		return;
   -	case GAP_SET_CONNECTABLE:
   -		set_connectable(data, len);
   -		return;
   -	case GAP_SET_DISCOVERABLE:
   -		set_discoverable(data, len);
   -		return;
   -	case GAP_SET_BONDABLE:
   -		set_bondable(data, len);
   -		return;
   -	case GAP_START_ADVERTISING:
   -		start_advertising(data, len);
   -		return;
   -	case GAP_STOP_ADVERTISING:
   -		stop_advertising(data, len);
   -		return;
   -	case GAP_START_DISCOVERY:
   -		start_discovery(data, len);
   -		return;
   -	case GAP_STOP_DISCOVERY:
   -		stop_discovery(data, len);
   -		return;
   -	case GAP_CONNECT:
   -		connect(data, len);
   -		return;
   -	case GAP_DISCONNECT:
   -		disconnect(data, len);
   -		return;
   -	case GAP_SET_IO_CAP:
   -		set_io_cap(data, len);
   -		return;
   -	case GAP_PAIR:
   -		pair(data, len);
   -		return;
   -	case GAP_UNPAIR:
   -		unpair(data, len);
   -		return;
   -	case GAP_PASSKEY_ENTRY:
   -		passkey_entry(data, len);
   -		return;
   -	case GAP_PASSKEY_CONFIRM:
   -		passkey_confirm(data, len);
   -		return;
   -	case GAP_START_DIRECT_ADV:
   -		start_direct_adv(data, len);
   -		return;
   -	case GAP_CONN_PARAM_UPDATE:
   -		conn_param_update_async(data, len);
   -		return;
   -	case GAP_OOB_LEGACY_SET_DATA:
   -		oob_legacy_set_data(data, len);
   -		return;
   -	case GAP_OOB_SC_GET_LOCAL_DATA:
   -		oob_sc_get_local_data(data, len);
   -		return;
   -	case GAP_OOB_SC_SET_REMOTE_DATA:
   -		oob_sc_set_remote_data(data, len);
   -		return;
   -	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);
   -		return;
   -	}
   -}
   -
   -static void tester_init_gap_cb(int err)
   -{
   -	if (err) {
   -		tester_rsp(BTP_SERVICE_ID_CORE, CORE_REGISTER_SERVICE,
   -			   BTP_INDEX_NONE, BTP_STATUS_FAILED);
   -		return;
   -	}
   -
   -	current_settings = 0;
   -	current_settings |= BIT(GAP_SETTINGS_POWERED);
   -	current_settings |= BIT(GAP_SETTINGS_LE);
   -
   -	os_callout_init(&update_params_co, os_eventq_dflt_get(),
   -			conn_param_update, NULL);
   -
   -	os_callout_init(&connected_ev_co, os_eventq_dflt_get(),
   -			device_connected_ev_send, NULL);
   -
   -	tester_rsp(BTP_SERVICE_ID_CORE, CORE_REGISTER_SERVICE, BTP_INDEX_NONE,
   -		   BTP_STATUS_SUCCESS);
   -}
   -
   -uint8_t tester_init_gap(void)
   +    SYS_LOG_ERR("Conn param update fail; rc=%d", rc);
   +}
   +
   +static void
   +conn_param_update_async(const uint8_t *data, uint16_t len)
   +{
   +    const struct gap_conn_param_update_cmd *cmd = (void *) data;
   +    update_params = *cmd;
   +
   +    os_callout_reset(&update_params_co, 0);
   +
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_CONN_PARAM_UPDATE, CONTROLLER_INDEX,
   +           BTP_STATUS_SUCCESS);
   +}
   +
   +static void
   +oob_legacy_set_data(const uint8_t *data, uint16_t len)
   +{
   +    const struct gap_oob_legacy_set_data_cmd *cmd = (void *) data;
   +
   +    ble_hs_cfg.sm_oob_data_flag = 1;
   +    memcpy(oob, cmd->oob_data, sizeof(oob));
   +
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_OOB_LEGACY_SET_DATA,
   +           CONTROLLER_INDEX, BTP_STATUS_SUCCESS);
   +}
   +
   +static void
   +oob_sc_get_local_data(const uint8_t *data, uint16_t len)
   +{
   +    struct gap_oob_sc_get_local_data_rp rp;
   +
   +    memcpy(rp.r, oob_data_local.r, 16);
   +    memcpy(rp.c, oob_data_local.c, 16);
   +
   +    tester_send(BTP_SERVICE_ID_GAP, GAP_OOB_SC_GET_LOCAL_DATA,
   +            CONTROLLER_INDEX, (uint8_t *) &rp, sizeof(rp));
   +}
   +
   +static void
   +oob_sc_set_remote_data(const uint8_t *data, uint16_t len)
   +{
   +    const struct gap_oob_sc_set_remote_data_cmd *cmd = (void *) data;
   +
   +    ble_hs_cfg.sm_oob_data_flag = 1;
   +    memcpy(oob_data_remote.r, cmd->r, 16);
   +    memcpy(oob_data_remote.c, cmd->c, 16);
   +
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_OOB_SC_SET_REMOTE_DATA,
   +           CONTROLLER_INDEX, BTP_STATUS_SUCCESS);
   +}
   +
   +static void
   +set_mitm(const uint8_t *data, uint16_t len)
   +{
   +    const struct gap_set_mitm_cmd *cmd = (void *) data;
   +
   +    ble_hs_cfg.sm_mitm = cmd->mitm;
   +
   +    tester_rsp(BTP_SERVICE_ID_GAP, GAP_SET_MITM,
   +           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)
   +{
   +    switch (opcode) {
   +    case GAP_READ_SUPPORTED_COMMANDS:
   +    case GAP_READ_CONTROLLER_INDEX_LIST:
   +        if (index != BTP_INDEX_NONE) {
   +            tester_rsp(BTP_SERVICE_ID_GAP, opcode, index,
   +                   BTP_STATUS_FAILED);
   +            return;
   +        }
   +        break;
   +    default:
   +        if (index != CONTROLLER_INDEX) {
   +            tester_rsp(BTP_SERVICE_ID_GAP, opcode, index,
   +                   BTP_STATUS_FAILED);
   +            return;
   +        }
   +        break;
   +    }
   +
   +    switch (opcode) {
   +    case GAP_READ_SUPPORTED_COMMANDS:
   +        supported_commands(data, len);
   +        return;
   +    case GAP_READ_CONTROLLER_INDEX_LIST:
   +        controller_index_list(data, len);
   +        return;
   +    case GAP_READ_CONTROLLER_INFO:
   +        controller_info(data, len);
   +        return;
   +    case GAP_SET_CONNECTABLE:
   +        set_connectable(data, len);
   +        return;
   +    case GAP_SET_DISCOVERABLE:
   +        set_discoverable(data, len);
   +        return;
   +    case GAP_SET_BONDABLE:
   +        set_bondable(data, len);
   +        return;
   +    case GAP_START_ADVERTISING:
   +        start_advertising(data, len);
   +        return;
   +    case GAP_STOP_ADVERTISING:
   +        stop_advertising(data, len);
   +        return;
   +    case GAP_START_DISCOVERY:
   +        start_discovery(data, len);
   +        return;
   +    case GAP_STOP_DISCOVERY:
   +        stop_discovery(data, len);
   +        return;
   +    case GAP_CONNECT:
   +        connect(data, len);
   +        return;
   +    case GAP_DISCONNECT:
   +        disconnect(data, len);
   +        return;
   +    case GAP_SET_IO_CAP:
   +        set_io_cap(data, len);
   +        return;
   +    case GAP_PAIR:
   +        pair(data, len);
   +        return;
   +    case GAP_UNPAIR:
   +        unpair(data, len);
   +        return;
   +    case GAP_PASSKEY_ENTRY:
   +        passkey_entry(data, len);
   +        return;
   +    case GAP_PASSKEY_CONFIRM:
   +        passkey_confirm(data, len);
   +        return;
   +    case GAP_START_DIRECT_ADV:
   +        start_direct_adv(data, len);
   +        return;
   +    case GAP_CONN_PARAM_UPDATE:
   +        conn_param_update_async(data, len);
   +        return;
   +    case GAP_OOB_LEGACY_SET_DATA:
   +        oob_legacy_set_data(data, len);
   +        return;
   +    case GAP_OOB_SC_GET_LOCAL_DATA:
   +        oob_sc_get_local_data(data, len);
   +        return;
   +    case GAP_OOB_SC_SET_REMOTE_DATA:
   +        oob_sc_set_remote_data(data, len);
   +        return;
   +    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);
   +        return;
   +    }
   +}
   +
   +static void
   +tester_init_gap_cb(int err)
   +{
   +    if (err) {
   +        tester_rsp(BTP_SERVICE_ID_CORE, CORE_REGISTER_SERVICE,
   +               BTP_INDEX_NONE, BTP_STATUS_FAILED);
   +        return;
   +    }
   +
   +    current_settings = 0;
   +    current_settings |= BIT(GAP_SETTINGS_POWERED);
   +    current_settings |= BIT(GAP_SETTINGS_LE);
   +
   +    os_callout_init(&update_params_co, os_eventq_dflt_get(),
   +            conn_param_update, NULL);
   +
   +    os_callout_init(&connected_ev_co, os_eventq_dflt_get(),
   +            device_connected_ev_send, NULL);
   +
   +    tester_rsp(BTP_SERVICE_ID_CORE, CORE_REGISTER_SERVICE, BTP_INDEX_NONE,
   +           BTP_STATUS_SUCCESS);
   +}
   +
   +uint8_t
   +tester_init_gap(void)
    {
    #if MYNEWT_VAL(BLE_SM_SC)
   -	int rc;
   -
   -	rc = ble_sm_sc_oob_generate_data(&oob_data_local);
   -	if (rc) {
   -		console_printf("Error: generating oob data; reason=%d\n", rc);
   -		return BTP_STATUS_FAILED;
   -	}
   +    int rc;
   +
   +    rc = ble_sm_sc_oob_generate_data(&oob_data_local);
   +    if (rc) {
   +        console_printf("Error: generating oob data; reason=%d\n", rc);
   +        return BTP_STATUS_FAILED;
   +    }
    #endif
    #if MYNEWT_VAL(BTTESTER_PRIVACY_MODE) && MYNEWT_VAL(BTTESTER_USE_NRPA)
   -	os_callout_init(&bttester_nrpa_rotate_timer, os_eventq_dflt_get(),
   +    os_callout_init(&bttester_nrpa_rotate_timer, os_eventq_dflt_get(),
                        rotate_nrpa_cb, NULL);
    #endif
   -	adv_buf = NET_BUF_SIMPLE(ADV_BUF_LEN);
   -
   -	tester_init_gap_cb(BTP_STATUS_SUCCESS);
   -	return BTP_STATUS_SUCCESS;
   -}
   -
   -uint8_t tester_unregister_gap(void)
   -{
   -	return BTP_STATUS_SUCCESS;
   -}
   +    adv_buf = NET_BUF_SIMPLE(ADV_BUF_LEN);
   +
   +    tester_init_gap_cb(BTP_STATUS_SUCCESS);
   +    return BTP_STATUS_SUCCESS;
   +}
   +
   +uint8_t
   +tester_unregister_gap(void)
   +{
   +    return BTP_STATUS_SUCCESS;
   +}
   ```
   
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@mynewt.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org