OTA Update working
This commit is contained in:
+29
-16
@@ -393,17 +393,34 @@ bool Pxx2OtaUpdate::waitStep(uint8_t step, uint8_t timeout)
|
||||
return true;
|
||||
}
|
||||
|
||||
const char * Pxx2OtaUpdate::nextStep(uint8_t step, const char * rxName, uint32_t address, const uint8_t * buffer)
|
||||
{
|
||||
OtaUpdateInformation * destination = moduleState[module].otaUpdateInformation;
|
||||
|
||||
destination->step = step;
|
||||
destination->address = address;
|
||||
|
||||
for (uint8_t retry = 0;; retry++) {
|
||||
extmodulePulsesData.pxx2.sendOtaUpdate(module, rxName, address, (const char *) buffer);
|
||||
if (waitStep(step + 1, 10)) {
|
||||
return nullptr;
|
||||
}
|
||||
else if (retry == 100) {
|
||||
return "Transfer failed";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const char * Pxx2OtaUpdate::doFlashFirmware(const char * filename)
|
||||
{
|
||||
FIL file;
|
||||
uint8_t buffer[32];
|
||||
UINT count;
|
||||
OtaUpdateInformation * destination = moduleState[module].otaUpdateInformation;
|
||||
const char * result;
|
||||
|
||||
destination->step = OTA_UPDATE_START;
|
||||
extmodulePulsesData.pxx2.sendOtaUpdate(module, rxName, 0, nullptr);
|
||||
if (!waitStep(OTA_UPDATE_START_ACK, 10)) {
|
||||
return "Transfer failed";
|
||||
result = nextStep(OTA_UPDATE_START, rxName, 0, nullptr);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (f_open(&file, filename, FA_READ) != FR_OK) {
|
||||
@@ -418,25 +435,21 @@ const char * Pxx2OtaUpdate::doFlashFirmware(const char * filename)
|
||||
f_close(&file);
|
||||
return "Read file failed";
|
||||
}
|
||||
destination->step = OTA_UPDATE_TRANSFER;
|
||||
extmodulePulsesData.pxx2.sendOtaUpdate(module, nullptr, done, (char *)buffer);
|
||||
if (!waitStep(OTA_UPDATE_TRANSFER_ACK, 10)) {
|
||||
return "Transfer failed";
|
||||
|
||||
result = nextStep(OTA_UPDATE_TRANSFER, nullptr, done, buffer);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (count < sizeof(buffer)) {
|
||||
f_close(&file);
|
||||
break;
|
||||
}
|
||||
|
||||
done += count;
|
||||
}
|
||||
|
||||
destination->step = OTA_UPDATE_EOF;
|
||||
extmodulePulsesData.pxx2.sendOtaUpdate(module, nullptr, done, nullptr);
|
||||
if (!waitStep(OTA_UPDATE_END, 10)) {
|
||||
return "Transfer failed";
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
return nextStep(OTA_UPDATE_EOF, nullptr, done, nullptr);
|
||||
}
|
||||
|
||||
void Pxx2OtaUpdate::flashFirmware(const char * filename)
|
||||
|
||||
@@ -137,7 +137,7 @@ enum PXX2OtaUpdateSteps {
|
||||
OTA_UPDATE_TRANSFER,
|
||||
OTA_UPDATE_TRANSFER_ACK,
|
||||
OTA_UPDATE_EOF,
|
||||
OTA_UPDATE_END
|
||||
OTA_UPDATE_EOF_ACK
|
||||
};
|
||||
|
||||
enum PXX2ReceiverStatus {
|
||||
@@ -295,6 +295,7 @@ class Pxx2OtaUpdate {
|
||||
|
||||
const char * doFlashFirmware(const char * filename);
|
||||
bool waitStep(uint8_t step, uint8_t timeout);
|
||||
const char * nextStep(uint8_t step, const char * rxName, uint32_t address, const uint8_t * buffer);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -248,7 +248,7 @@ void processOtaUpdateFrame(uint8_t module, uint8_t * frame)
|
||||
OtaUpdateInformation * destination = moduleState[module].otaUpdateInformation;
|
||||
|
||||
if (destination->step == OTA_UPDATE_START) {
|
||||
if (frame[3] == 0x00 && memcmp(&destination->candidateReceiversNames[destination->selectedReceiverIndex], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
if (frame[3] == 0x00 && memcmp(destination->candidateReceiversNames[destination->selectedReceiverIndex], &frame[4], PXX2_LEN_RX_NAME) == 0) {
|
||||
destination->step = OTA_UPDATE_START_ACK;
|
||||
}
|
||||
}
|
||||
@@ -260,7 +260,7 @@ void processOtaUpdateFrame(uint8_t module, uint8_t * frame)
|
||||
}
|
||||
else if (destination->step == OTA_UPDATE_EOF) {
|
||||
if (frame[3] == 0x02) {
|
||||
destination->step = OTA_UPDATE_END;
|
||||
destination->step = OTA_UPDATE_EOF_ACK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -930,7 +930,7 @@
|
||||
#define TR_FLASH_EXTERNAL_DEVICE TR("Flash S.Port", "Flash S.Port device")
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
|
||||
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
|
||||
#define TR_CURRENT_VERSION TR("Curr Vers: ", "Current version: ")
|
||||
#define TR_FLASH_INTERNAL_MODULE TR("Flash int. module", "Flash internal module")
|
||||
#define TR_FLASH_EXTERNAL_MODULE TR("Flash ext. module", "Flash external module")
|
||||
#define TR_FIRMWARE_UPDATE_ERROR TR("FW update error", "Firmware update error")
|
||||
|
||||
Reference in New Issue
Block a user