From 03f885e0f4f41ce72c6a36b1f627c428ba7bb3ef Mon Sep 17 00:00:00 2001 From: thekurtovic <40248206+thekurtovic@users.noreply.github.com> Date: Fri, 15 Nov 2024 09:23:15 -0500 Subject: [PATCH 1/2] NimBLEDevice::get/setPower support full power range. --- src/NimBLEDevice.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/NimBLEDevice.cpp b/src/NimBLEDevice.cpp index 1f137095..f14f9a1b 100644 --- a/src/NimBLEDevice.cpp +++ b/src/NimBLEDevice.cpp @@ -448,6 +448,20 @@ bool NimBLEDevice::setPower(int8_t dbm) { NIMBLE_LOGD(LOG_TAG, ">> setPower: %d", dbm); # ifdef ESP_PLATFORM # ifndef CONFIG_IDF_TARGET_ESP32P4 +# if defined(CONFIG_IDF_TARGET_ESP32S3) \ + || defined(CONFIG_IDF_TARGET_ESP32C3) \ + || defined(CONFIG_IDF_TARGET_ESP32C6) \ + || defined(CONFIG_IDF_TARGET_ESP32H2) + if (dbm >= 20) + dbm = ESP_PWR_LVL_P20; + else if (dbm >= 18) + dbm = ESP_PWR_LVL_P18; + else if (dbm >= 15) + dbm = ESP_PWR_LVL_P15; + else if (dbm >= 12) + dbm = ESP_PWR_LVL_P12; + else +# endif // CONFIG_IDF_TARGET_ESP32S3||C3||C6||H2 if (dbm >= 9) { dbm = ESP_PWR_LVL_P9; } else if (dbm >= 6) { @@ -464,6 +478,24 @@ bool NimBLEDevice::setPower(int8_t dbm) { dbm = ESP_PWR_LVL_N9; } else if (dbm >= -12) { dbm = ESP_PWR_LVL_N12; + } +# ifdef CONFIG_IDF_TARGET_ESP32C6 + else if (dbm >= -15) { + dbm = ESP_PWR_LVL_N15; + } +# endif // CONFIG_IDF_TARGET_ESP32C6 +# if defined(CONFIG_IDF_TARGET_ESP32S3) \ + || defined(CONFIG_IDF_TARGET_ESP32C3) \ + || defined(CONFIG_IDF_TARGET_ESP32H2) + else if (dbm >= -15) { + dbm = ESP_PWR_LVL_N15; + } else if (dbm >= -18) { + dbm = ESP_PWR_LVL_N18; + } else if (dbm >= -21) { + dbm = ESP_PWR_LVL_N21; + } else if (dbm >= -24) { + dbm = ESP_PWR_LVL_N24; +# endif // CONFIG_IDF_TARGET_ESP32S3||C3||H2 } else { NIMBLE_LOGE(LOG_TAG, "Unsupported power level"); return false; @@ -501,6 +533,14 @@ int NimBLEDevice::getPower() { # ifdef ESP_PLATFORM # ifndef CONFIG_IDF_TARGET_ESP32P4 switch (esp_ble_tx_power_get(ESP_BLE_PWR_TYPE_DEFAULT)) { + case ESP_PWR_LVL_N24: + return -24; + case ESP_PWR_LVL_N21: + return -21; + case ESP_PWR_LVL_N18: + return -18; + case ESP_PWR_LVL_N15: + return -15; case ESP_PWR_LVL_N12: return -12; case ESP_PWR_LVL_N9: @@ -517,6 +557,14 @@ int NimBLEDevice::getPower() { return 6; case ESP_PWR_LVL_P9: return 9; + case ESP_PWR_LVL_P12: + return 12; + case ESP_PWR_LVL_P15: + return 15; + case ESP_PWR_LVL_P18: + return 18; + case ESP_PWR_LVL_P20: + return 20; default: return 0xFF; } From 9c08f1aff6351da05b2b9459906dcab05f745251 Mon Sep 17 00:00:00 2001 From: thekurtovic <40248206+thekurtovic@users.noreply.github.com> Date: Fri, 15 Nov 2024 11:27:41 -0500 Subject: [PATCH 2/2] Fix double closing brace on else. --- src/NimBLEDevice.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/NimBLEDevice.cpp b/src/NimBLEDevice.cpp index f14f9a1b..13f3dc2f 100644 --- a/src/NimBLEDevice.cpp +++ b/src/NimBLEDevice.cpp @@ -495,8 +495,9 @@ bool NimBLEDevice::setPower(int8_t dbm) { dbm = ESP_PWR_LVL_N21; } else if (dbm >= -24) { dbm = ESP_PWR_LVL_N24; + } # endif // CONFIG_IDF_TARGET_ESP32S3||C3||H2 - } else { + else { NIMBLE_LOGE(LOG_TAG, "Unsupported power level"); return false; }