Skip to main content

impOS Release 42

impOS Version Naming

Electric Imp versions impOS™ releases as follows: odd-numbered major versions are pre-releases and even-numbered major versions are production-quality releases. As such, impOS 42 builds heavily on impOS 41, which was not released publicly. For information on changes and bug-fixes implemented in the various minor releases of impOS 41, please see the relevant release notes. This document will focus on changes made following the release of impOS 42, and upon new features introduced in impOS 41 but made public for the first time with impOS 42.

Versions

The current release is 42.9 (see Release Notes and Known Issues).

New Features And Improvements

imp006 Improvements

The primary role of impOS 42 is to fully support the imp006 module:

  • Full cellular support:
    • Include more information in the imp.net.getcellinfo() response: the result of the commands AT+CGREG?, AT+QCSQ and AT+QNWINFO.
    • Allow for per-telco (per-SIM-owner) modem setup commands.
    • Support NB-IoT SIMs.
    • Support cellular and WiFi connectivity where both interfaces are fitted.
  • Full BLE support with integrated firmware (unlike other imps) covering the Cypress CYW43455 integrated into the Murata LBEE5HY1MW WiFi/BLE module and the Cypress CYW4343W integrated into the Murata LBEE5KL1DX WiFi/BLE module supported by the imp006a and imp006b variants, respectively.
  • Virtual machine (VM) bytecode space has been increased from 256KB to 512KB, double the size available on previous impOS releases.
  • Full peripheral support: hardware.i2c, hardware.spi, hardware.spiflash, hardware.uart.
  • Full hardware.dfsdm digital microphone input support.
  • Full hardware.fixedfrequencydac support.
  • Add imp API method imp.enablerescuepin(), the imp006 equivalent of imp.setrescuepin() for other imps.

Developer Guides

Additional Improvments

impOS 42 additionally provides the following enhancements:

  • Multiple network interface usage and management (aka ‘MNIF’)
    • Developed for imps with more than one network interface: for example, the imp006 which has customizable interface options (initially WiFi and cellular), and the imp005 supports both WiFi and Ethernet.
    • Manage which interfaces are used and when: eg. WiFi for primary impCloud™ access and cellular for emergency connections, or cellular for impCloud access and WiFi for local networking
    • Please see imp Network Interface Management for a more detailed view of MNIF.
  • User Datagram Protocol (UDP) support over local networks.
  • More Squirrel application code storage
    • On impC001, VM bytecode space has increased from 256KB to 512KB on these imps, double the size available on previous releases.
    • On imp005, VM bytecode space has increased from 256KB to 768KB — three times the size available on previous releases. Note The more space you use for code on the imp005, the less RAM workspace you have available — please check your app size and RAM usage accordingly.
  • The imp is not now considered connected until the server responds.

Developer Guides

Key Changes To Note

impOS 42 makes a major change to the behavior of imp.enableblinkup(). From impOS 42, there will no longer be any period for which BlinkUp will always remain active after the code imp.enableblinkup(false); has run, even if the imp is still in the initial, ‘BOOTING’ phase. There is no initial 60-second window during which BlinkUp is always available; BlinkUp will be disabled (or re-enabled) as soon as Squirrel processes the imp.enableblinkup() call.

Customers should note this change, especially if their device code calls imp.enableblinkup() early on. If the imp cold boots and fails to connect to the server within ten seconds, Squirrel will start and an early call to imp.enableblinkup() may come too quickly to allow end-users to re-configure activated devices.

New impOS Methods

Updated impOS Methods

Release Notes

42.9

  • Bug fixes
    • All imps:
      • Fix initial joining of WiFi networks offering 802.11r “Fast Roaming” (regression in 41.16).
      • Fix rare cases of the imp not noticing incoming network data.
      • Fix potential heap corruption on particular cellular network packets.

42.8

  • Bug fixes
    • imp006:
      • Incorporate USB bus reset into the recovery procedure used when the modem stops responding. Note Implemented in 45.3.

42.7

  • Bug fixes
    • All imps:
      • Improve robustness against “BadAlloc”-style attacks. No actual vulnerabilities have been found.
      • Fix occasional crash in imp.setsendbuffersize().
      • Add upstream patch for CVE-2021-41556, though this wasn’t exploitable on imps.
      • Fix incorrect data in imp.net.info() following transient SIM errors on modem startup.
      • Fix memory leak in bluetooth.servegatt().

42.6

  • Features
    • All imps:
      • Fix Squirrel timer objects keeping a reference to their callback closure.
    • imp005/imp006a:
      • Join WPA 3 WiFi networks either in WPA 3 mode or in WPA 2/3 transitional mode.
  • Bug Fixes
    • imp001-imp004m:
      • Fix joining WPA 3 WiFi networks in WPA 2/3 transitional mode (regression in 41.16).
    • imp001-004, imp006, impC001:
      • Fix occasional crash when reconfiguring a running UART.

42.5

  • Bug Fixes
    • All imps:
      • Fix Squirrel timers over 4,294 seconds (232μs) (regression in 41.34).

42.4

  • Bug Fixes
    • imp004m:
      • Fix a crash if starting Bluetooth fails (regression in 41.28).

42.3

  • Bug Fixes
    • All imps:
      • Fix an occasional crash occurring when the server sets the connection keep-alive settings.
    • imp005:
      • Fix an occasional crash occurring when UART is configured under an interrupt load.

42.2

  • Features:
    • All imps:
    • imp006:
      • Revert a 41.34 change: keep the 32kHz crystal drive strength “low” to preserve compatibility.
    • imp006/impC001:
      • React more quickly to de-registration and PPP errors on cellular connection.

42.1

  • Bug Fixes
    • imp005:
      • Prevent UART inadvertently being read before the UART is configured.

42.0

  • Features
    • All imps:
      • Enable support for TCP selective ACK, which should speed up upgrades over networks experiencing packet loss.
    • imp006:
      • Increase TCP input window, again should speed up upgrades

Please see the impOS 41 release notes for details of earlier changes.

Known Issues

  • Currently, imp.net.open() will reject any Network Interface Configuration (NIC) containing proxy, static network and/or WiFi configurations when it addresses an interface which is already in use — even if the new NIC exactly matches the one that is already in use. Until this issue is addressed, please include NICs with only an interface key when re-calling imp.net.open().
  • Reconfiguring the pulse counter with a different duration causes pulses to be mis-counted.
  • Although the imp003 has ten ADC-capable pins, only eight can be used simultaneously.
  • Squirrel strings containing NULs (bytes equal to zero) do not compare correctly in relative comparisons (<= etc.) even though they do in equality comparisons (== and !=). This has been the case in all impOS releases made thus far.