85 lines
2.2 KiB
C++
85 lines
2.2 KiB
C++
#ifndef BLEOTA
|
|
#define BLEOTA
|
|
|
|
#include <Arduino.h>
|
|
#include <BLEServer.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();
|
|
|
|
typedef enum otaCommand {
|
|
CMD_ON = 0x00,
|
|
CMD_READY = 0x01,
|
|
CMD_DONE = 0x02,
|
|
CMD_AGREE = 0x03,
|
|
CMD_DISAGREE = 0x04,
|
|
CMD_ERROR = 0x0F
|
|
};
|
|
|
|
typedef enum otaStage {
|
|
STAGE_READY,
|
|
STAGE_FLASHING,
|
|
STAGE_DONE,
|
|
STAGE_ERROR
|
|
};
|
|
private:
|
|
|
|
void setOTAcommand(otaCommand cmd);
|
|
|
|
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 */ |