#include "BluetoothSoftwareUpdate.h" #include "PowerFSM.h" #include "configuration.h" #include "esp_task_wdt.h" #include "main.h" #include "nimble/BluetoothUtil.h" #include "sleep.h" #include "target_specific.h" #include "utils.h" #include #include void getMacAddr(uint8_t *dmac) { assert(esp_efuse_mac_get_default(dmac) == ESP_OK); } /* static void printBLEinfo() { int dev_num = esp_ble_get_bond_device_num(); esp_ble_bond_dev_t *dev_list = (esp_ble_bond_dev_t *)malloc(sizeof(esp_ble_bond_dev_t) * dev_num); esp_ble_get_bond_device_list(&dev_num, dev_list); for (int i = 0; i < dev_num; i++) { // esp_ble_remove_bond_device(dev_list[i].bd_addr); } } */ void esp32Setup() { uint32_t seed = esp_random(); DEBUG_MSG("Setting random seed %u\n", seed); randomSeed(seed); // ESP docs say this is fairly random DEBUG_MSG("Total heap: %d\n", ESP.getHeapSize()); DEBUG_MSG("Free heap: %d\n", ESP.getFreeHeap()); DEBUG_MSG("Total PSRAM: %d\n", ESP.getPsramSize()); DEBUG_MSG("Free PSRAM: %d\n", ESP.getFreePsram()); nvs_stats_t nvs_stats; auto res = nvs_get_stats(NULL, &nvs_stats); assert(res == ESP_OK); DEBUG_MSG("NVS: UsedEntries %d, FreeEntries %d, AllEntries %d\n", nvs_stats.used_entries, nvs_stats.free_entries, nvs_stats.total_entries); // enableModemSleep(); // Since we are turning on watchdogs rather late in the release schedule, we really don't want to catch any // false positives. The wait-to-sleep timeout for shutting down radios is 30 secs, so pick 45 for now. #define APP_WATCHDOG_SECS 45 res = esp_task_wdt_init(APP_WATCHDOG_SECS, true); assert(res == ESP_OK); res = esp_task_wdt_add(NULL); assert(res == ESP_OK); } #if 0 // Turn off for now uint32_t axpDebugRead() { axp.debugCharging(); DEBUG_MSG("vbus current %f\n", axp.getVbusCurrent()); DEBUG_MSG("charge current %f\n", axp.getBattChargeCurrent()); DEBUG_MSG("bat voltage %f\n", axp.getBattVoltage()); DEBUG_MSG("batt pct %d\n", axp.getBattPercentage()); DEBUG_MSG("is battery connected %d\n", axp.isBatteryConnect()); DEBUG_MSG("is USB connected %d\n", axp.isVBUSPlug()); DEBUG_MSG("is charging %d\n", axp.isChargeing()); return 30 * 1000; } Periodic axpDebugOutput(axpDebugRead); #endif /// loop code specific to ESP32 targets void esp32Loop() { esp_task_wdt_reset(); // service our app level watchdog loopBLE(); bluetoothRebootCheck(); // for debug printing // radio.radioIf.canSleep(); }