Skip to main content

Release 27

New features

The major change in this release is the behaviour on cold boot (power-up), when no Wifi is available. In previous releases, the imp always checked with the server on cold boot, to make sure the Squirrel it had was up-to-date. No wifi meant no server, and thus no start-up. In release 27, the imp will still try to check with the server on cold boot, but if it fails to join Wifi at all, after ten seconds it will proceed to start up the Squirrel code anyway (like it already does on wake-from-deep-sleep). This is intended to be useful for device manufacturers who wish to use an imp to power their device's "out-of-the-box" behaviour even before their end-user has joined the device to their Wifi, but also to protect developers against bricking units by loading code that, for example, sleeps immediately.

Other things you may notice

  • The flashing imp LED codes have been extended, to provide extra diagnostic information when the imp can't connect to Wifi. The codes are documented here.

  • The deep-sleep calls imp.deepsleepuntil(), server.expectonlineat() and server.sleepuntil() now allow sleeping for up to 7 days; imp.deepsleepfor(), server.expectonlinein() and server.sleepfor() allow up to 28 days. Previously, the maximum was 24 hours for all calls.

  • The UART "word size" and "parity" options are now correctly implemented, although the underlying hardware does not allow all theoretical combinations; for full details see uart.configure().

  • The hardware.wakereason() call can now distinguish restarts due to a Squirrel run-time error (WAKEREASON_SQUIRREL_ERROR) from restarts due to new Squirrel pushed by the server (WAKEREASON_NEW_SQUIRREL). This is particularly useful when Squirrel has suffered a run-time error while Wifi was disconnected. Such errors are now also logged in our Web IDE when the imp reconnects, which makes debugging offline code a lot easier.

  • Better connection maintenance: deals with more scenarios that could cause an imp to become disconnected.

  • Improved Android blinkup performance. Trilevel blinkup is now even more resilient against misbehaving phones.

  • Improved SPI performance. No inter-byte gaps means you can drive WS2811/2812 NeoPixels perfectly with release 27.

  • Improved RTC calibration on IMP002 modules.

  • Improved connect performance: better retry strategy means more reliably quick connections.

  • imp.onidle() now only fires when the server has replied confirming the device has the latest code; this means that you don't need to insert arbitrary delays when doing short wakes to ensure you can download new code to the imp.

  • More free memory should be available to Squirrel in release 27 than in previous releases -- in some cases, substantially more (20K, or even 35K).

  • Part of the memory improvement came from reimplementing the Squirrel standard "blob" class in C++. We thought that this was a transparent change, but very late in the day it was pointed out to us that there is a way in which Squirrel can tell the difference: by trying to inherit from it ("class superblob extends blob"). Such code will no longer work in release 27. As a workaround, change superblob to use composition, not inheritance.

New API Calls and Functionality