Fix compilation with esp32p4 (#253)

This commit is contained in:
h2zero 2024-12-03 08:47:41 -07:00 committed by GitHub
parent 6c85cfa6c3
commit b5b46661e0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 24 additions and 21 deletions

View file

@ -17,16 +17,13 @@ jobs:
# See https://hub.docker.com/r/espressif/idf/tags and # See https://hub.docker.com/r/espressif/idf/tags and
# https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html # https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html
# for details. # for details.
idf_ver: ["release-v4.4", "release-v5.1"] idf_ver: ["release-v4.4", "release-v5.1", "release-v5.3"]
idf_target: ["esp32", "esp32s3", "esp32c2", "esp32c3", "esp32c6", "esp32h2"] idf_target: ["esp32", "esp32s3", "esp32c2", "esp32c3", "esp32c6", "esp32h2", "esp32p4"]
example: example:
- Advanced/NimBLE_Client - Advanced/NimBLE_Client
- Advanced/NimBLE_Server - Advanced/NimBLE_Server
- Continuous_scan
- Bluetooth_5/NimBLE_extended_client - Bluetooth_5/NimBLE_extended_client
- Bluetooth_5/NimBLE_extended_server - Bluetooth_5/NimBLE_extended_server
- Bluetooth_5/NimBLE_multi_advertiser
- NimBLE_server_get_client_name
exclude: exclude:
- idf_target: "esp32" - idf_target: "esp32"
example: Bluetooth_5/NimBLE_extended_client example: Bluetooth_5/NimBLE_extended_client
@ -40,6 +37,10 @@ jobs:
idf_target: "esp32c6" idf_target: "esp32c6"
- idf_ver: release-v4.4 - idf_ver: release-v4.4
idf_target: "esp32h2" idf_target: "esp32h2"
- idf_ver: release-v4.4
idf_target: "esp32p4"
- idf_ver: release-v5.1
idf_target: "esp32p4"
container: espressif/idf:${{ matrix.idf_ver }} container: espressif/idf:${{ matrix.idf_ver }}
steps: steps:

View file

@ -341,7 +341,7 @@ void app_main (void){
NimBLEDevice::setSecurityAuth(/*BLE_SM_PAIR_AUTHREQ_BOND | BLE_SM_PAIR_AUTHREQ_MITM |*/ BLE_SM_PAIR_AUTHREQ_SC); NimBLEDevice::setSecurityAuth(/*BLE_SM_PAIR_AUTHREQ_BOND | BLE_SM_PAIR_AUTHREQ_MITM |*/ BLE_SM_PAIR_AUTHREQ_SC);
/** Optional: set the transmit power, default is -3db */ /** Optional: set the transmit power, default is -3db */
NimBLEDevice::setPower(ESP_PWR_LVL_P9); /** 12db */ NimBLEDevice::setPower(9); // 9dbm
/** create new scan */ /** create new scan */
NimBLEScan* pScan = NimBLEDevice::getScan(); NimBLEScan* pScan = NimBLEDevice::getScan();

View file

@ -14,7 +14,7 @@ extern "C" void app_main(void);
#define SERVICE_UUID "ABCD" #define SERVICE_UUID "ABCD"
#define CHARACTERISTIC_UUID "1234" #define CHARACTERISTIC_UUID "1234"
static NimBLEAdvertisedDevice* advDevice; static const NimBLEAdvertisedDevice* advDevice;
static bool doConnect = false; static bool doConnect = false;
static uint32_t scanTime = 10 * 1000; // In milliseconds, 0 = scan forever static uint32_t scanTime = 10 * 1000; // In milliseconds, 0 = scan forever
@ -37,7 +37,7 @@ class ClientCallbacks : public NimBLEClientCallbacks {
/* Define a class to handle the callbacks when advertisements are received */ /* Define a class to handle the callbacks when advertisements are received */
class scanCallbacks: public NimBLEScanCallbacks { class scanCallbacks: public NimBLEScanCallbacks {
void onResult(NimBLEAdvertisedDevice* advertisedDevice) { void onResult(const NimBLEAdvertisedDevice* advertisedDevice) {
printf("Advertised Device found: %s\n", advertisedDevice->toString().c_str()); printf("Advertised Device found: %s\n", advertisedDevice->toString().c_str());
if(advertisedDevice->isAdvertisingService(NimBLEUUID("ABCD"))) if(advertisedDevice->isAdvertisingService(NimBLEUUID("ABCD")))
{ {
@ -52,7 +52,7 @@ class scanCallbacks: public NimBLEScanCallbacks {
} }
/** Callback to process the results of the completed scan or restart it */ /** Callback to process the results of the completed scan or restart it */
void onScanEnd(NimBLEScanResults results) { void onScanEnd(const NimBLEScanResults& results, int rc) {
printf("Scan Ended\n"); printf("Scan Ended\n");
} }
}; };

View file

@ -48,7 +48,7 @@ class scanCallbacks : public NimBLEScanCallbacks {
} }
} }
void onScanEnd(NimBLEScanResults results) { void onScanEnd(const NimBLEScanResults&, int reason) {
printf("Scan Ended\n"); printf("Scan Ended\n");
NimBLEDevice::getScan()->start(scanTimeMs); NimBLEDevice::getScan()->start(scanTimeMs);
} }

View file

@ -422,16 +422,13 @@ std::vector<NimBLEClient*> NimBLEDevice::getConnectedClients() {
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
# ifdef ESP_PLATFORM # ifdef ESP_PLATFORM
# ifndef CONFIG_IDF_TARGET_ESP32P4
/** /**
* @brief Get the transmission power. * @brief Get the transmission power.
* @return The power level currently used in esp_power_level_t. * @return The power level currently used in esp_power_level_t.
*/ */
esp_power_level_t NimBLEDevice::getPowerLevel(esp_ble_power_type_t powerType) { esp_power_level_t NimBLEDevice::getPowerLevel(esp_ble_power_type_t powerType) {
# ifdef CONFIG_IDF_TARGET_ESP32P4
return 0xFF; // CONFIG_IDF_TARGET_ESP32P4 does not support esp_ble_tx_power_get
# else
return esp_ble_tx_power_get(powerType); return esp_ble_tx_power_get(powerType);
# endif
} // getPowerLevel } // getPowerLevel
/** /**
@ -440,19 +437,16 @@ esp_power_level_t NimBLEDevice::getPowerLevel(esp_ble_power_type_t powerType) {
* @return True if the power level was set successfully. * @return True if the power level was set successfully.
*/ */
bool NimBLEDevice::setPowerLevel(esp_power_level_t powerLevel, esp_ble_power_type_t powerType) { bool NimBLEDevice::setPowerLevel(esp_power_level_t powerLevel, esp_ble_power_type_t powerType) {
# ifdef CONFIG_IDF_TARGET_ESP32P4
return false; // CONFIG_IDF_TARGET_ESP32P4 does not support esp_ble_tx_power_set
# else
esp_err_t errRc = esp_ble_tx_power_set(powerType, powerLevel); esp_err_t errRc = esp_ble_tx_power_set(powerType, powerLevel);
if (errRc != ESP_OK) { if (errRc != ESP_OK) {
NIMBLE_LOGE(LOG_TAG, "esp_ble_tx_power_set: rc=%d", errRc); NIMBLE_LOGE(LOG_TAG, "esp_ble_tx_power_set: rc=%d", errRc);
} }
return errRc == ESP_OK; return errRc == ESP_OK;
# endif
} // setPowerLevel } // setPowerLevel
# endif // !CONFIG_IDF_TARGET_ESP32P4
# endif // ESP_PLATFORM
# endif
/** /**
* @brief Set the transmission power. * @brief Set the transmission power.
* @param [in] dbm The power level to set in dBm. * @param [in] dbm The power level to set in dBm.
@ -460,10 +454,14 @@ bool NimBLEDevice::setPowerLevel(esp_power_level_t powerLevel, esp_ble_power_typ
*/ */
bool NimBLEDevice::setPower(int8_t dbm) { bool NimBLEDevice::setPower(int8_t dbm) {
# ifdef ESP_PLATFORM # ifdef ESP_PLATFORM
# ifdef CONFIG_IDF_TARGET_ESP32P4
return false; // CONFIG_IDF_TARGET_ESP32P4 does not support esp_ble_tx_power_set
# else
if (dbm % 3 == 2) { if (dbm % 3 == 2) {
dbm++; // round up to the next multiple of 3 to be able to target 20dbm dbm++; // round up to the next multiple of 3 to be able to target 20dbm
} }
return setPowerLevel(static_cast<esp_power_level_t>(dbm / 3 + ESP_PWR_LVL_N0)); return setPowerLevel(static_cast<esp_power_level_t>(dbm / 3 + ESP_PWR_LVL_N0));
# endif
# else # else
NIMBLE_LOGD(LOG_TAG, ">> setPower: %d", dbm); NIMBLE_LOGD(LOG_TAG, ">> setPower: %d", dbm);
ble_hci_vs_set_tx_pwr_cp cmd{dbm}; ble_hci_vs_set_tx_pwr_cp cmd{dbm};

View file

@ -18,8 +18,10 @@
#include "nimconfig.h" #include "nimconfig.h"
#if defined(CONFIG_BT_ENABLED) #if defined(CONFIG_BT_ENABLED)
# ifdef ESP_PLATFORM # ifdef ESP_PLATFORM
# ifndef CONFIG_IDF_TARGET_ESP32P4
# include <esp_bt.h> # include <esp_bt.h>
# endif # endif
# endif
# if defined(CONFIG_NIMBLE_CPP_IDF) # if defined(CONFIG_NIMBLE_CPP_IDF)
# include <host/ble_gap.h> # include <host/ble_gap.h>
@ -136,10 +138,12 @@ class NimBLEDevice {
static int getPower(); static int getPower();
static bool setPower(int8_t dbm); static bool setPower(int8_t dbm);
# if defined(ESP_PLATFORM) # ifdef ESP_PLATFORM
# ifndef CONFIG_IDF_TARGET_ESP32P4
static esp_power_level_t getPowerLevel(esp_ble_power_type_t powerType = ESP_BLE_PWR_TYPE_DEFAULT); static esp_power_level_t getPowerLevel(esp_ble_power_type_t powerType = ESP_BLE_PWR_TYPE_DEFAULT);
static bool setPowerLevel(esp_power_level_t powerLevel, esp_ble_power_type_t powerType = ESP_BLE_PWR_TYPE_DEFAULT); static bool setPowerLevel(esp_power_level_t powerLevel, esp_ble_power_type_t powerType = ESP_BLE_PWR_TYPE_DEFAULT);
# endif # endif
# endif
# if CONFIG_BT_NIMBLE_EXT_ADV # if CONFIG_BT_NIMBLE_EXT_ADV
static bool setDefaultPhy(uint8_t txPhyMask, uint8_t rxPhyMask); static bool setDefaultPhy(uint8_t txPhyMask, uint8_t rxPhyMask);