#include "BluetoothSerial.h" #include "HardwareSerial.h" #include "esp_log.h" #include "mString.h" /* Check the ESP configuration */ #if not defined(CONFIG_BT_ENABLED) || not defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it #endif #if not defined(CONFIG_BT_SPP_ENABLED) #error Serial Port Profile for Bluetooth is not available or not enabled. It is only available for the ESP32 chip. #endif #if not defined(CONFIG_BT_SSP_ENABLED) #error Simple Secure Pairing for Bluetooth is not available or not enabled. #endif /* ************************* */ typedef std::function DeviceConnectedCb; typedef std::function NewPackageCallback; class BluetoothDispatcher { public: BluetoothDispatcher(BluetoothSerial *controller, const char *device_name = "Helicopter"); bool initialize(bool loop_on_fail = true, int readTimeoutMS = 2); void tick(NewPackageCallback newPackageReceivedCb = nullptr); void onNewDeviceConnected(DeviceConnectedCb deviceConnectedCb); void sendPackage(const char *package, size_t size); ~BluetoothDispatcher(); private: void _onConfirmRequest(uint16_t pin); void _onAuthComplete(boolean success); void _onDeviceConnected(BTAddress device); const char *_device_name = nullptr; BluetoothSerial *_controller = nullptr; DeviceConnectedCb _deviceConnectedCallback = nullptr; constexpr static const char *_tag = "BluetoothDispatcher"; static constexpr uint16_t _buffer_size = 512; static constexpr uint16_t _available_buffer_size = 500; mString<_buffer_size> _buffer; };