Files
BLEOTA/src/BLEOTA.h

87 lines
2.2 KiB
C++

#ifndef BLEOTA
#define BLEOTA
#include <Arduino.h>
#include <BLEServer.h>
#include <BLE2902.h>
#include <Update.h>
#define OTA_SERVICE_UUID "71a4438e-fd52-4b15-b3d2-ec0e3e561900"
#define VERSION_NUMBER_UUID "71a4438e-fd52-4b15-b3d2-ec0e3e561910"
#define VERSION_NUMBER_DESCRIPTOR_UUID "71a4438e-fd52-4b15-b3d2-ec0e3e561911"
#define OTA_COMMAND_UUID "71a4438e-fd52-4b15-b3d2-ec0e3e561920"
#define OTA_COMMAND_DESCRIPTOR_UUID "71a4438e-fd52-4b15-b3d2-ec0e3e561921"
#define OTA_FILE_UUID "71a4438e-fd52-4b15-b3d2-ec0e3e561930"
#define OTA_FILE_DESCRIPTOR_UUID "71a4438e-fd52-4b15-b3d2-ec0e3e561931"
class BLEOTAClass {
public:
BLEOTAClass();
void begin(BLEServer* server, char* versionNumber = "1.0.0");
void loop();
enum otaCommand {
CMD_ON = 0x00,
CMD_READY = 0x01,
CMD_DONE = 0x02,
CMD_AGREE = 0x03,
CMD_DISAGREE = 0x04,
CMD_ERROR = 0x0F
};
enum otaStage {
STAGE_READY,
STAGE_FLASHING,
STAGE_DONE,
STAGE_ERROR
};
private:
void setOTAcommand(otaCommand cmd);
void sendFileProgress(uint32_t progress);
class OTACommandCallbacks : public BLECharacteristicCallbacks {
public:
OTACommandCallbacks(BLEOTAClass* pParent);
void onWrite(BLECharacteristic* pCharacteristic, esp_ble_gatts_cb_param_t* param) override;
private:
BLEOTAClass* pParent_;
};
class OTAFileCallbacks : public BLECharacteristicCallbacks {
public:
OTAFileCallbacks(BLEOTAClass* pParent);
void onWrite(BLECharacteristic* pCharacteristic, esp_ble_gatts_cb_param_t* param) override;
private:
BLEOTAClass* pParent_;
};
BLEServer* pServer_;
char* vNum_;
BLECharacteristic* pVersionNumber_;
BLEDescriptor* pVersionNumberDescriptor_;
BLECharacteristic* pOTACommand_;
BLEDescriptor* pOTACommandDescriptor_;
OTACommandCallbacks* cmdCallbacks_;
otaCommand currentCommand_;
BLECharacteristic* pOTAFile_;
BLEDescriptor* pOTAFileDescriptor_;
OTAFileCallbacks* fileCallbacks_;
uint32_t fileSize_ = 0;
uint32_t fileProgress_ = 0;
otaStage state_ = otaStage::STAGE_READY;
unsigned long lastLoop_ = 0;
};
extern BLEOTAClass BLEota;
#endif /* BLEOTA */