47 lines
1.6 KiB
C++
47 lines
1.6 KiB
C++
#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<void(BTAddress device)> DeviceConnectedCb;
|
|
typedef std::function<void(char *package)> 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;
|
|
}; |