#ifndef BLEOTA #define BLEOTA #include #include #include #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 */