diff --git a/platformio.ini b/platformio.ini index 093a8d477..cd1755adf 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,6 +15,11 @@ default_envs = tbeam ; default to a US frequency range, change it as needed for your region and hardware (CN, JP, EU433, EU865) hw_version = US +; Common settings for ESP targes, mixin with extends = esp32_base +[esp32_base] +src_filter = + ${env.src_filter} - + [env] platform = espressif32 framework = arduino @@ -70,7 +75,8 @@ lib_deps = https://github.com/meshtastic/SparkFun_Ublox_Arduino_Library.git ; The 1.0 release of the TBEAM board -[env:tbeam] +[env:tbeam] +extends = esp32_base board = ttgo-t-beam lib_deps = ${env.lib_deps} @@ -79,22 +85,26 @@ build_flags = ${env.build_flags} -D TBEAM_V10 ; The original TBEAM board without the AXP power chip and a few other changes -[env:tbeam0.7] +[env:tbeam0.7] +extends = esp32_base board = ttgo-t-beam build_flags = ${env.build_flags} -D TBEAM_V07 [env:heltec] ;build_type = debug ; to make it possible to step through our jtag debugger +extends = esp32_base board = heltec_wifi_lora_32_V2 [env:ttgo-lora32-v1] +extends = esp32_base board = ttgo-lora32-v1 build_flags = ${env.build_flags} -D TTGO_LORA_V1 ; note: the platformio definition for lora32-v2 seems stale, it is missing a pins_arduino.h file, therefore I don't think it works [env:ttgo-lora32-v2] +extends = esp32_base board = ttgo-lora32-v1 build_flags = ${env.build_flags} -D TTGO_LORA_V2 @@ -104,4 +114,8 @@ build_flags = [env:bare] board = ttgo-lora32-v1 build_flags = - ${env.build_flags} -D BARE_BOARD \ No newline at end of file + ${env.build_flags} -D BARE_BOARD +src_filter = + ${env.src_filter} - +lib_ignore = + BluetoothOTA \ No newline at end of file diff --git a/src/bare/main-bare.cpp b/src/bare/main-bare.cpp new file mode 100644 index 000000000..29532a639 --- /dev/null +++ b/src/bare/main-bare.cpp @@ -0,0 +1,6 @@ +#include "target_specific.h" + +void setBluetoothEnable(bool on) +{ + // Do nothing +} \ No newline at end of file diff --git a/src/configuration.h b/src/configuration.h index a8128882d..862aa0f12 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -202,6 +202,8 @@ along with this program. If not, see . // This string must exactly match the case used in release file names or the android updater won't work #define HW_VENDOR "bare" +#define NO_ESP32 // Don't use ESP32 libs (mainly bluetooth) + #endif // ----------------------------------------------------------------------------- diff --git a/src/esp32/main-esp32.cpp b/src/esp32/main-esp32.cpp new file mode 100644 index 000000000..baf0d85b7 --- /dev/null +++ b/src/esp32/main-esp32.cpp @@ -0,0 +1,53 @@ +#include "BluetoothUtil.h" +#include "MeshBluetoothService.h" +#include "PowerFSM.h" +#include "configuration.h" +#include "main.h" +#include "target_specific.h" + +bool bluetoothOn; + +// This routine is called multiple times, once each time we come back from sleep +void reinitBluetooth() +{ + DEBUG_MSG("Starting bluetooth\n"); + + // FIXME - we are leaking like crazy + // AllocatorScope scope(btPool); + + // Note: these callbacks might be coming in from a different thread. + BLEServer *serve = initBLE( + [](uint32_t pin) { + powerFSM.trigger(EVENT_BLUETOOTH_PAIR); + screen.startBluetoothPinScreen(pin); + }, + []() { screen.stopBluetoothPinScreen(); }, getDeviceName(), HW_VENDOR, xstr(APP_VERSION), + xstr(HW_VERSION)); // FIXME, use a real name based on the macaddr + createMeshBluetoothService(serve); + + // Start advertising - this must be done _after_ creating all services + serve->getAdvertising()->start(); +} + +// Enable/disable bluetooth. +void setBluetoothEnable(bool on) +{ + if (on != bluetoothOn) { + DEBUG_MSG("Setting bluetooth enable=%d\n", on); + + bluetoothOn = on; + if (on) { + Serial.printf("Pre BT: %u heap size\n", ESP.getFreeHeap()); + // ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) ); + reinitBluetooth(); + } else { + // We have to totally teardown our bluetooth objects to prevent leaks + stopMeshBluetoothService(); // Must do before shutting down bluetooth + deinitBLE(); + destroyMeshBluetoothService(); // must do after deinit, because it frees our service + Serial.printf("Shutdown BT: %u heap size\n", ESP.getFreeHeap()); + // ESP_ERROR_CHECK( heap_trace_stop() ); + // heap_trace_dump(); + } + } +} \ No newline at end of file diff --git a/src/target_specific.h b/src/target_specific.h new file mode 100644 index 000000000..6acca364a --- /dev/null +++ b/src/target_specific.h @@ -0,0 +1,6 @@ +#pragma once + +// Functions that are unique to particular target types (esp32, bare, nrf52 etc...) + +// Enable/disable bluetooth. +void setBluetoothEnable(bool on); \ No newline at end of file