Repeated call to Cellular causing crash - device unreachable

Customer wanted to see what RSSI level was at a prototype remote device. As quick edit I added the following code into loop() to update fRSSI and fCellQuality which was already being reported (but set to zero) and did an OTA:

  CellularSignal sig = Cellular.RSSI();
  fRSSI = sig.getStrengthValue();
  fCellQuality = sig.getQualityValue();

Unit no longer responds to pings or attempts to OTA update. I’ve bricked the unit haven’t I?!

Is this all your loop() does?
If so, you should consider that the RSSI reading can take some time to return and if you do it “permanently” with just a few milliseconds between your device will be “deaf” most the time.

To update OTA again, put the device into Safe Mode.

Thanks ScruffR. No, that’s just an excerpt - but nothing else takes much time in order to ensure that Particle.process is called regularly. Of course, now it seems the call to Cellular - despite the unit having good access to cell and cloud is stopping the call to Particle.process and thus unit cannot see there is an OTA waiting.

Yes, I made a truly amateur hour mistake but I took the code from the reference document assuming there were no odd side effects and the library call would do as described. I wished the documentation made it clear whenever there is a function which can block. Or if there is a function which should not be called too often - build into the function a ‘throttle’ with an optional override parameter which can be passed in. Some of these library functions can truly make a system fragile without the developer knowing it.

I cannot manually put the device into safe mode - it is 4 hours away from customer (who is 1 day away from me) - is there any trick to getting an OTA to occur even if the unit is spending most of its time running code in Cellular?