mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-09-10 03:00:03 +00:00
mesh: optimize performance for lpn node
Fixed overflow risk when poll_timeout is 1s, although it is not recommended to use it like this, when it is used like this, POLL_TIMEOUT_MAX will overflow. When the poll timeout set like above, the default 6 req_attemps for first pull request lost, may cause this procedure bigger than poll_timeout, When lpn node terminate with friend node, currently will be scan some seconds to receive friend clear confirm, but this will be consume a lots of energy, so just disable receiver. this is port of 69a26031a801b69fe43da6df9864b907d1a34b2f
This commit is contained in:
committed by
Łukasz Rymanowski
parent
05b30afd4a
commit
74a57e51de
+12
-11
@@ -42,15 +42,19 @@
|
||||
|
||||
#define POLL_RETRY_TIMEOUT K_MSEC(100)
|
||||
|
||||
#define REQ_RETRY_DURATION(lpn) (4 * (LPN_RECV_DELAY + (lpn)->adv_duration + \
|
||||
(lpn)->recv_win + POLL_RETRY_TIMEOUT))
|
||||
#define REQ_RETRY_DURATION(lpn) (LPN_RECV_DELAY + (lpn)->adv_duration + \
|
||||
(lpn)->recv_win + POLL_RETRY_TIMEOUT)
|
||||
|
||||
#define POLL_TIMEOUT_INIT (MYNEWT_VAL(BLE_MESH_LPN_INIT_POLL_TIMEOUT) * 100)
|
||||
#define POLL_TIMEOUT_MAX(lpn) ((MYNEWT_VAL(BLE_MESH_LPN_POLL_TIMEOUT) * 100) - \
|
||||
REQ_RETRY_DURATION(lpn))
|
||||
#define REQ_ATTEMPTS(lpn) (POLL_TIMEOUT_MAX(lpn) < K_SECONDS(3) ? 2 : 4)
|
||||
|
||||
#define CLEAR_ATTEMPTS 2
|
||||
#define REQ_ATTEMPTS_MAX 6
|
||||
#define REQ_ATTEMPTS(lpn) MIN(REQ_ATTEMPTS_MAX, \
|
||||
POLL_TIMEOUT_INIT / REQ_RETRY_DURATION(lpn))
|
||||
|
||||
#define POLL_TIMEOUT_MAX(lpn) (POLL_TIMEOUT_INIT - \
|
||||
(REQ_ATTEMPTS(lpn) * REQ_RETRY_DURATION(lpn)))
|
||||
|
||||
#define CLEAR_ATTEMPTS 3
|
||||
|
||||
#define LPN_CRITERIA ((MYNEWT_VAL(BLE_MESH_LPN_MIN_QUEUE_SIZE)) | \
|
||||
(MYNEWT_VAL(BLE_MESH_LPN_RSSI_FACTOR) << 3) | \
|
||||
@@ -145,10 +149,7 @@ static void friend_clear_sent(int err, void *user_data)
|
||||
{
|
||||
struct bt_mesh_lpn *lpn = &bt_mesh.lpn;
|
||||
|
||||
/* We're switching away from Low Power behavior, so permanently
|
||||
* enable scanning.
|
||||
*/
|
||||
bt_mesh_scan_enable();
|
||||
/* Scanning will enable if lpn state still enabled */
|
||||
|
||||
lpn->req_attempts++;
|
||||
|
||||
@@ -711,7 +712,7 @@ static void update_timeout(struct bt_mesh_lpn *lpn)
|
||||
bt_mesh_scan_disable();
|
||||
}
|
||||
|
||||
if (lpn->req_attempts < 6) {
|
||||
if (lpn->req_attempts < REQ_ATTEMPTS(lpn)) {
|
||||
BT_WARN("Retrying first Friend Poll");
|
||||
lpn->sent_req = 0;
|
||||
if (send_friend_poll() == 0) {
|
||||
|
||||
Reference in New Issue
Block a user