Skip to content

Commit

Permalink
nimble/gap: Remove notification for update process timeout.
Browse files Browse the repository at this point in the history
The connection parameter update process has a hard-coded 40-second timeout,
but in reality, the time it takes to complete a connection parameter might take longer, as it
depends on the connection interval and when controller deciders to do it.
This patch changes meaning of this 40 sec timer to be only a guard so the application
does not perform too many connection update parameter requests.
Now when timeout fires, application will not be notified about that and link will not be dropped.
  • Loading branch information
zacwbond committed Mar 26, 2020
1 parent 2e4d060 commit 3d7c9e6
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 68 deletions.
1 change: 0 additions & 1 deletion nimble/host/src/ble_gap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1943,7 +1943,6 @@ ble_gap_update_timer(void)
ble_hs_unlock();

if (entry != NULL) {
ble_gap_update_notify(conn_handle, BLE_HS_ETIMEOUT);
ble_gap_update_entry_free(entry);
}
} while (entry != NULL);
Expand Down
67 changes: 0 additions & 67 deletions nimble/host/test/src/ble_gap_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -2049,70 +2049,6 @@ ble_gap_test_util_update_l2cap(struct ble_gap_upd_params *params,
peer_addr, 6) == 0);
}

static void
ble_gap_test_util_update_no_l2cap_tmo(struct ble_gap_upd_params *params,
int master)
{
struct ble_hs_conn *conn;
int rc;

uint8_t peer_addr[6] = { 1, 2, 3, 4, 5, 6 };

ble_gap_test_util_init();

ble_hs_test_util_create_conn(2, peer_addr, ble_gap_test_util_connect_cb,
NULL);

if (!master) {
ble_hs_lock();
conn = ble_hs_conn_find(2);
TEST_ASSERT_FATAL(conn != NULL);
conn->bhc_flags &= ~BLE_HS_CONN_F_MASTER;
ble_hs_unlock();
}

/* Erase callback info reported during connection establishment; we only
* care about updates.
*/
ble_gap_test_util_reset_cb_info();

TEST_ASSERT(!ble_gap_master_in_progress());

rc = ble_hs_test_util_conn_update(2, params, 0);
TEST_ASSERT(rc == 0);
TEST_ASSERT(!ble_gap_master_in_progress());

/* Verify tx of connection update command. */
ble_gap_test_util_verify_tx_update_conn(params);

/* Ensure no update event reported. */
TEST_ASSERT(ble_gap_test_event.type == 0xff);

/* Advance 39 seconds; ensure no timeout reported. */
os_time_advance(39 * OS_TICKS_PER_SEC);
ble_gap_timer();
TEST_ASSERT(ble_gap_test_event.type == 0xff);

/* Advance 40th second; ensure timeout reported. */
os_time_advance(1 * OS_TICKS_PER_SEC);

/* Timeout will result in a terminate HCI command being sent; schedule ack
* from controller.
*/
ble_hs_test_util_hci_ack_set_disconnect(0);

ble_gap_timer();

/* Verify terminate was sent. */
ble_gap_test_util_verify_tx_disconnect();

TEST_ASSERT(ble_gap_test_event.type == BLE_GAP_EVENT_CONN_UPDATE);
TEST_ASSERT(ble_gap_test_conn_status == BLE_HS_ETIMEOUT);
TEST_ASSERT(ble_gap_test_conn_desc.conn_handle == 2);
TEST_ASSERT(memcmp(ble_gap_test_conn_desc.peer_id_addr.val,
peer_addr, 6) == 0);
}

static void
ble_gap_test_util_update_l2cap_tmo(struct ble_gap_upd_params *params,
uint8_t hci_status, uint8_t event_status,
Expand Down Expand Up @@ -2982,9 +2918,6 @@ TEST_CASE_SELF(ble_gap_test_case_update_timeout)
.max_ce_len = 456,
};

/* No L2CAP. */
ble_gap_test_util_update_no_l2cap_tmo(&params, 1);

/* L2CAP - Local unsupported; L2CAP timeout. */
ble_gap_test_util_update_l2cap_tmo(&params, BLE_ERR_UNKNOWN_HCI_CMD, 0, 0);

Expand Down

0 comments on commit 3d7c9e6

Please sign in to comment.