First attempt at file transfer

This commit is contained in:
2025-11-28 23:29:37 +00:00
parent 8d5b663c78
commit 316fbd7c60
2 changed files with 204 additions and 22 deletions

View File

@@ -3,20 +3,81 @@
#include <Arduino.h>
#include <BLEServer.h>
#include <Update.h>
#define OTA_SERVICE_UUID "71a4438e-fd52-4b15-b3d2-ec0e3e56193b"
#define VERSION_NUMBER_UUID "1978a3df-c009-4837-b295-57ef429dde8c"
#define VERSION_NUMBER_DESCRIPTOR_UUID "1e0c35d1-ba03-4f4d-a99c-bac7664d95ed"
#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");
private:
BLEServer* _pServer;
char* _vNum;
BLECharacteristic* _pVersionNumber;
BLEDescriptor* _pVersionNumberDescriptor;
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;