Skip to content

Commit f71cef4

Browse files
committed
Remove force firmware after loading
1 parent a57d429 commit f71cef4

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

Firmware/RTK_Surveyor/menuFirmware.ino

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ void scanForFirmware()
6666
tempFile.getName(fname, sizeof(fname));
6767

6868
if (strcmp(forceFirmwareFileName, fname) == 0)
69+
{
70+
Serial.println(F("Forced firmware detected. Loading..."));
6971
updateFromSD((char *)forceFirmwareFileName);
72+
}
7073

7174
//Check for 'sfe_rtk' and 'bin' extension
7275
if (strcmp(BIN_EXT, &fname[strlen(fname) - strlen(BIN_EXT)]) == 0)
@@ -109,8 +112,10 @@ void updateFromSD(char *firmwareFileName)
109112
}
110113

111114
Serial.print(F("Moving file to OTA section"));
115+
Serial.print(F("Bytes to write: "));
116+
Serial.print(updateSize);
112117

113-
const int pageSize = 512;
118+
const int pageSize = 512 * 4;
114119
byte dataArray[pageSize];
115120
int bytesWritten = 0;
116121

@@ -122,15 +127,19 @@ void updateFromSD(char *firmwareFileName)
122127
//Bulk write from the SD file to the EEPROM
123128
while (firmwareFile.available())
124129
{
130+
digitalWrite(baseStatusLED, !digitalRead(baseStatusLED)); //Toggle LED to indcate activity
131+
125132
int bytesToWrite = pageSize; //Max number of bytes to read
126133
if (firmwareFile.available() < bytesToWrite) bytesToWrite = firmwareFile.available(); //Trim this read size as needed
127134

128135
firmwareFile.read(dataArray, bytesToWrite); //Read the next set of bytes from file into our temp array
136+
delay(10); //Give RTOS time
129137

130138
if (Update.write(dataArray, bytesToWrite) != bytesToWrite)
131139
Serial.println(F("Write failed"));
132140
else
133141
bytesWritten += bytesToWrite;
142+
delay(10); //Give RTOS time
134143

135144
//Indicate progress
136145
if (bytesWritten > barWidth * portionSize)
@@ -151,6 +160,24 @@ void updateFromSD(char *firmwareFileName)
151160
if (Update.isFinished())
152161
{
153162
Serial.println(F("Firmware updated successfully. Rebooting. Good bye!"));
163+
164+
//If forced firmware is detected, do a full reset of config as well
165+
if (strcmp(forceFirmwareFileName, firmwareFileName) == 0)
166+
{
167+
Serial.println(F("Removing firmware file"));
168+
169+
//Remove forced firmware file to prevent endless loading
170+
firmwareFile.close();
171+
sd.remove(firmwareFileName);
172+
173+
eepromErase();
174+
175+
if (sd.exists(settingsFileName))
176+
sd.remove(settingsFileName);
177+
178+
myGPS.factoryReset(); //Reset everything: baud rate, I2C address, update rate, everything.
179+
}
180+
154181
delay(1000);
155182
ESP.restart();
156183
}

Firmware/Test Sketches/SD_Update/menuFirmware.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ void updateFromSD(char *firmwareFileName)
141141
Serial.print("\n[");
142142
for (int x = 0 ; x < barWidth ; x++)
143143
Serial.print("=");
144-
Serial.printf("%02d%%", bytesWritten * 100 / updateSize);
144+
Serial.printf("%d%%", bytesWritten * 100 / updateSize);
145145
if (bytesWritten == updateSize) Serial.println("]");
146146
}
147147
}

0 commit comments

Comments
 (0)