Have tried the serial based update to 1.0.5 and various other firmware related trials and will relate my experience/conclusions here:
Trying to get ready to test the serial update, I managed to get an Oak to a place where it wouldn't update OTA anymore -- and I was not trying yet -- just getting ready to test serial update posted by Admin. So...flashed the firmware and had a functional Oak again! Thanks, Eric
Then, more systematically, went to 1.0.2 and back via the Arduino Board Manager. Both would load and reload OTA sketches. The OakTerm really helps follow painlessly. Thanks KH.
Tried 1.0.3 and ended up having to do a factory restore. After serial flash to factory restore state, I didn't succeed in an immediate second Serial Flash to 1.0.5. Had to do the Serial Factory restore flash, Config the SSID and password and manage the first Particle OTA update.
From there I could use IDE board manager. 1.0.3 is to be avoided IMHO.
Following this serial factory to 1.0.5 via OTA w IDE Board Manager, I went to 1.0.2, then used the serial update to go to 1.0.5. Flashed 1.0.5 twice. After first, Oak was showing Config. Mode and didn't want to flash w serial. Grounded Pin1 and Pin2 both during flash to 1.0.5. Conclusion -- looks like if you are moderately non-functional and three blinking in config mode but can't upload, the serial flash to 1.0.5 will be a fix -- faster than full factory + OTA first update. (I will try the one, 2 flash of factory + 1.0.5 update again w possible use of Pin 1 to Ground on second serial flash -- or shouldn't this get me to a useful state anyway?
If the device is not too messed up and the serial flash to 1.0.5 works, a benefit is that it did not wipe my SSID and password. Unit came up and logged back on in Config Mode and took a OTA sketch.
For example once 1.0.5 is running, I went to(a) 1.0.2 with Board Manager and ran a Temp/Humidity sketch to (b) a simple test sketch in 1.0.2 (editing sketch to list version in Particle.println statement), then(c) reloaded this simple sketch using 1.0.5 via Board Manager and (d) back to my Blynk enabled Temp/Humidity sketch in 1.05 all within a bit over 10 min OTA (timelines below).
I suspect that if you generate an error or two in 1.0.2, you end up unable to recover as readily as does 1.0.5, but can't state that as fact.
I find 1.0.3 to be about a one sketch firmware and to be avoided.
The 1.0.5 firmware continues to be well behaved and robust for me
I may have had the odd need to use a Pin 1 reset to config mode, power cycle or 2 upload tries to succeed, but generally, everything recovers well.
If Particle says the OTA Flash succeeded (I saw this a few times) it failed.
If Particle says the OTA Flash failed, it is usually a good sign and it worked -- can we get the logic on the return code inverted for OAK flashes?
If the Flash dots ie Flashing............................................................................... go much longer than that, it is almost always a fail.
Same for the reboot dots.
If we get another buggy core release, please don't pull all the files. We were left without the ability to regress to 1.0.2 -- which still works decently for me. Perhaps something like 1.0.3 could be substituted with a prior release such as 1.0.2 (ie a copy renamed 1.0.3 with appropriate checksum for the IDE) to prevent additional bricking.
I use an processor removed UNO to do the serial flashes. I have had occasionally to move the UNO to OAK ground to a different ground socket on my OAK or wiggle it in real well and have benefited a bit (I believe) by cleaning up my solder joints at all the ground pins and Vin Vcc etc.) I have had great serial flashing success using the 3.3V output on UNO to the Vcc points on the OAK and Ground to Ground to power the Oak from UNO. I like having a common ground and everything powers up at once. I use a USB3 port on my Desktop to assure I have adequate power and have also used an external power supply to the UNO (but not lately -- might be better w USB 2 connection).
As always, your mileage may vary.
James
[23:50:39] Event: spark/flash/status - started
[23:50:54] Event: spark/status - offline
[23:50:54] Event: spark/flash/status - failed
[23:51:02] Event: spark/status - online
[23:51:22] % RH = 55.2
Temp = 20.9
[23:51:37] % RH = 57.4
Temp = 20.4
[23:51:52] % RH = 57.6
Temp = 20.4
[23:52:07] % RH = 57.8
Temp = 20.3
[23:52:22] % RH = 58.0
Temp = 20.3
[23:52:37] % RH = 58.2
Temp = 20.3
[23:52:52] % RH = 58.3
Temp = 20.2
[23:53:07] % RH = 58.4
Temp = 20.2
[23:53:22] % RH = 58.6
Temp = 20.2
[23:53:37] % RH = 58.8
Temp = 20.1
[23:53:52] % RH = 59.0
Temp = 20.1
[23:54:07] % RH = 59.1
Temp = 20.1
[23:54:22] % RH = 59.1
Temp = 20.1
[23:54:37] % RH = 59.2
Temp = 20.0
[23:54:52] % RH = 59.4
Temp = 20.0
[23:55:05] Event: spark/flash/status - started
[23:55:21] Event: spark/status - offline
[23:55:21] Event: spark/flash/status - failed
[23:55:28] Event: spark/status - online
[23:55:44] Event: Hi! - w 15 sec timer
[23:55:44] Hi using 1.0.2 loop#1
[23:55:59] Event: Hi! - w 15 sec timer
[23:55:59] Hi using 1.0.2 loop#2
[23:56:14] Event: Hi! - w 15 sec timer
[23:56:14] Hi using 1.0.2 loop#3
[23:56:29] Event: Hi! - w 15 sec timer
[23:56:29] Hi using 1.0.2 loop#4
[23:56:44] Event: Hi! - w 15 sec timer
[23:56:44] Hi using 1.0.2 loop#5
[23:56:59] Event: Hi! - w 15 sec timer
[23:56:59] Hi using 1.0.2 loop#6
[23:57:14] Event: Hi! - w 15 sec timer
[23:57:14] Hi using 1.0.2 loop#7
[23:57:29] Event: Hi! - w 15 sec timer
[23:57:29] Hi using 1.0.2 loop#8
[23:57:44] Event: Hi! - w 15 sec timer
[23:57:44] Hi using 1.0.2 loop#9
[23:57:59] Event: Hi! - w 15 sec timer
[23:57:59] Hi using 1.0.2 loop#10
[23:58:14] Event: spark/flash/status - started
[23:58:29] Event: spark/status - offline
[23:58:29] Event: spark/flash/status - failed
[23:58:37] Event: spark/status - online
[23:58:52] Event: Hi! - w 15 sec timer
[23:58:52] Hi using 1.0.5 loop#1
[23:59:07] Event: Hi! - w 15 sec timer
[23:59:07] Hi using 1.0.5 loop#2
[23:59:22] Event: Hi! - w 15 sec timer
[23:59:22] Hi using 1.0.5 loop#3
[23:59:27] Event: spark/flash/status - started
[23:59:46] Event: spark/status - offline
[23:59:46] Event: spark/flash/status - failed
[23:59:53] Event: spark/status - online
[00:00:13] % RH = 59.4
Temp = 20.0
[00:00:28] % RH = 60.3
Temp = 19.8
[00:00:43] % RH = 60.3
Temp = 19.8