Skip to content

Commit d59eacd

Browse files
committed
Merge pull request arduino#147 from tekka007/OTA/20150802
OTA improvements
2 parents b28a28d + d92a15f commit d59eacd

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

libraries/MySensors/MySensor.cpp

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ boolean MySensor::process() {
522522
#ifdef MY_OTA_FIRMWARE_FEATURE
523523
unsigned long enter = hw_millis();
524524
if (fwUpdateOngoing && (enter - fwLastRequestTime > MY_OTA_RETRY_DELAY)) {
525-
if (fwRetry == 0) {
525+
if (!fwRetry) {
526526
debug(PSTR("fw upd fail\n"));
527527
// Give up. We have requested MY_OTA_RETRY times without any packet in return.
528528
fwUpdateOngoing = false;
@@ -746,38 +746,38 @@ boolean MySensor::process() {
746746
return false;
747747
} else debug(PSTR("fw update skipped\n"));
748748
} else if (type == ST_FIRMWARE_RESPONSE) {
749-
// Save block to flash
750-
debug(PSTR("fw block %d\n"), fwBlock);
751-
// extract FW block
752-
ReplyFWBlock *firmwareResponse = (ReplyFWBlock *)msg.data;
753-
// write to flash
754-
flash.writeBytes( ((fwBlock - 1) * FIRMWARE_BLOCK_SIZE) + FIRMWARE_START_OFFSET, firmwareResponse->data, FIRMWARE_BLOCK_SIZE);
755-
// wait until flash written
756-
while ( flash.busy() );
757-
fwBlock--;
758-
if (!fwBlock) {
759-
// We're finished! Do a checksum and reboot.
760-
if (isValidFirmware()) {
761-
debug(PSTR("fw checksum ok\n"));
762-
// All seems ok, write size and signature to flash (DualOptiboot will pick this up and flash it)
763-
flash.writeBytes(0, "FLXIMG:", 7);
764-
// FW size in flash
765-
uint16_t fwsize = FIRMWARE_BLOCK_SIZE * fc.blocks;
766-
flash.writeByte(7, fwsize >> 8);
767-
flash.writeByte(8, fwsize);
768-
// end of header
769-
flash.writeByte(9, ':');
770-
// Write the new firmware config to eeprom
771-
hw_writeConfigBlock((void*)&fc, (void*)EEPROM_FIRMWARE_TYPE_ADDRESS, sizeof(NodeFirmwareConfig));
772-
hw_reboot();
773-
} else {
774-
debug(PSTR("fw checksum fail\n"));
749+
if (fwUpdateOngoing) {
750+
// Save block to flash
751+
debug(PSTR("fw block %d\n"), fwBlock);
752+
// extract FW block
753+
ReplyFWBlock *firmwareResponse = (ReplyFWBlock *)msg.data;
754+
// write to flash
755+
flash.writeBytes( ((fwBlock - 1) * FIRMWARE_BLOCK_SIZE) + FIRMWARE_START_OFFSET, firmwareResponse->data, FIRMWARE_BLOCK_SIZE);
756+
// wait until flash written
757+
while ( flash.busy() );
758+
fwBlock--;
759+
if (!fwBlock) {
760+
// We're finished! Do a checksum and reboot.
775761
fwUpdateOngoing = false;
776-
}
762+
if (isValidFirmware()) {
763+
debug(PSTR("fw checksum ok\n"));
764+
// All seems ok, write size and signature to flash (DualOptiboot will pick this up and flash it)
765+
uint16_t fwsize = FIRMWARE_BLOCK_SIZE * fc.blocks;
766+
uint8_t OTAbuffer[10] = {'F','L','X','I','M','G',':',(fwsize >> 8),fwsize,':'};
767+
flash.writeBytes(0, OTAbuffer, 10);
768+
// Write the new firmware config to eeprom
769+
hw_writeConfigBlock((void*)&fc, (void*)EEPROM_FIRMWARE_TYPE_ADDRESS, sizeof(NodeFirmwareConfig));
770+
hw_reboot();
771+
} else {
772+
debug(PSTR("fw checksum fail\n"));
773+
}
774+
}
775+
// reset flags
776+
fwRetry = MY_OTA_RETRY+1;
777+
fwLastRequestTime = 0;
778+
} else {
779+
debug(PSTR("No fw update ongoing\n"));
777780
}
778-
// reset flags
779-
fwRetry = MY_OTA_RETRY+1;
780-
fwLastRequestTime = 0;
781781
return false;
782782
}
783783

0 commit comments

Comments
 (0)