mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-03-31 06:05:56 +00:00
86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "../BaseSerialInterface.h"
|
|
#include <BLEDevice.h>
|
|
#include <BLEServer.h>
|
|
#include <BLEUtils.h>
|
|
#include <BLE2902.h>
|
|
|
|
class SerialBLEInterface : public BaseSerialInterface, BLESecurityCallbacks, BLEServerCallbacks, BLECharacteristicCallbacks {
|
|
BLEServer *pServer;
|
|
BLEService *pService;
|
|
BLECharacteristic * pTxCharacteristic;
|
|
bool deviceConnected;
|
|
bool oldDeviceConnected;
|
|
bool _isEnabled;
|
|
uint16_t last_conn_id;
|
|
uint32_t _pin_code;
|
|
unsigned long _last_write;
|
|
unsigned long adv_restart_time;
|
|
|
|
struct Frame {
|
|
uint8_t len;
|
|
uint8_t buf[MAX_FRAME_SIZE];
|
|
};
|
|
|
|
#define FRAME_QUEUE_SIZE 4
|
|
int recv_queue_len;
|
|
Frame recv_queue[FRAME_QUEUE_SIZE];
|
|
int send_queue_len;
|
|
Frame send_queue[FRAME_QUEUE_SIZE];
|
|
|
|
void clearBuffers() { recv_queue_len = 0; send_queue_len = 0; }
|
|
|
|
protected:
|
|
// BLESecurityCallbacks methods
|
|
uint32_t onPassKeyRequest() override;
|
|
void onPassKeyNotify(uint32_t pass_key) override;
|
|
bool onConfirmPIN(uint32_t pass_key) override;
|
|
bool onSecurityRequest() override;
|
|
void onAuthenticationComplete(esp_ble_auth_cmpl_t cmpl) override;
|
|
|
|
// BLEServerCallbacks methods
|
|
void onConnect(BLEServer* pServer) override;
|
|
void onConnect(BLEServer* pServer, esp_ble_gatts_cb_param_t *param) override;
|
|
void onMtuChanged(BLEServer* pServer, esp_ble_gatts_cb_param_t* param) override;
|
|
void onDisconnect(BLEServer* pServer) override;
|
|
|
|
// BLECharacteristicCallbacks methods
|
|
void onWrite(BLECharacteristic* pCharacteristic, esp_ble_gatts_cb_param_t* param) override;
|
|
|
|
public:
|
|
SerialBLEInterface() {
|
|
pServer = NULL;
|
|
pService = NULL;
|
|
deviceConnected = false;
|
|
oldDeviceConnected = false;
|
|
adv_restart_time = 0;
|
|
_isEnabled = false;
|
|
_last_write = 0;
|
|
last_conn_id = 0;
|
|
send_queue_len = recv_queue_len = 0;
|
|
}
|
|
|
|
void begin(const char* device_name, uint32_t pin_code);
|
|
|
|
// BaseSerialInterface methods
|
|
void enable() override;
|
|
void disable() override;
|
|
bool isEnabled() const override { return _isEnabled; }
|
|
|
|
bool isConnected() const override;
|
|
|
|
bool isWriteBusy() const override;
|
|
size_t writeFrame(const uint8_t src[], size_t len) override;
|
|
size_t checkRecvFrame(uint8_t dest[]) override;
|
|
};
|
|
|
|
#if BLE_DEBUG_LOGGING && ARDUINO
|
|
#include <Arduino.h>
|
|
#define BLE_DEBUG_PRINT(F, ...) Serial.printf("BLE: " F, ##__VA_ARGS__)
|
|
#define BLE_DEBUG_PRINTLN(F, ...) Serial.printf("BLE: " F "\n", ##__VA_ARGS__)
|
|
#else
|
|
#define BLE_DEBUG_PRINT(...) {}
|
|
#define BLE_DEBUG_PRINTLN(...) {}
|
|
#endif
|