Skip to content

Latest commit

 

History

History
556 lines (419 loc) · 42 KB

CHANGELOG.md

File metadata and controls

556 lines (419 loc) · 42 KB

v0.6.0-rc.1

BREAKING CHANGES

  • UDP.flush() and TCP.flush() now conform to the Stream.flush() behavior from Arduino 1.0 Wiring. The current (correct) behavior is to wait until all data has been transmitted. Previous behavior discarded data in the buffer. #469

FEATURES

  • Logging library for flexible system and application logging.
  • [Electron] Reduced data consumption connecting to the cloud with deep sleep. (NB: see the docs for how to gain the full data reduction.) #953
  • Can set Claim Code via the Serial interface (for use by the CLI.) #602
  • Device ID available via dfu-util. #949
  • [Electron] Firmware Reset now available. #975 and Docs
  • System reset reporting #403
  • [Photon/Electron/P1] Composite USB device driver with HID Mouse & Keyboard implementation for STM32F2 #902 and #528
  • Exposes Device ID and Bootloader Version through USB descriptors while in DFU mode, Microsoft WCID support #1001
  • USB vendor-specific setup request handling #1010
  • [Electron] now allows OTA bootloader updates #1002
  • Added Daylight Saving Time support #1058 per proposed #211

ENHANCEMENTS

  • Local build warns if crc32 is not present. #941
  • [Photon/Core] MAC address is available immediately after WiFi.on() #879
  • [virtual device] support for TCP Server #1000
  • [virtual device] support for EEPROM emulation #1004
  • Low-level RTOS queues exposed in HAL #1018
  • USART LIN bus support. #930
  • USART added support for 7E1, 7E2, 7O1, 7O2 modes. #997
  • Configurable resolution for analogWrite (PWM and DAC) #991
  • System flag SYSTEM_FLAG_RESET_NETWORK_ON_CLOUD_ERRORS to control if the device resets the network when it cannot connect to the cloud. #946
  • [Photon] 1KB system backup memory added (same size as Electron) reducing user backup memory to 3KB (3068 bytes) #1046
  • Automatically adds vendored libraries from the lib directory for extended application projects #1053
  • Extended spi_master_slave tests with SPI_MODE0/1/2/3 and MSBFIRST/LSBFIRST testing #1056
  • [Electron] System parts reordered from 3,1,2 to 1,2,3 to preserve logical flashing order for OTA/YModem when upgrading. #1065

BUGFIXES

  • SoftAP mode persisting when setup complete if Wi-Fi was off. #971
  • Free memory allocated for previous system interrupt handler #951 fixes #927
  • Fixes to I2C Slave mode implementation with clock stretching enabled #931
  • millis()/micros() are now atomic to ensure monotonic values. Fixes #916, #925 and #1042
  • availableForWrite() was reporting bytes available instead of bytes available for write #1020 and #1017
  • digitalRead() interferes with analogRead() #993
  • USART 9-bit receiving. #968
  • Fix soft AP suffix broken by the addition of device id in DCT #1030
  • WKP pin should not be enabled as a wakeup source unconditionally for STOP mode #948 and #938
  • General I2C Improvements and MCP23017 tests #1047
  • Rebuilt Wiced_Network_LwIP_FreeRTOS.a WWD_for_SDIO_FreeRTOS.a on OSX #1057 fixes Local build stalling on object dump #1049
  • Validates that module dependencies would still be satisfied after the module from the "ota_module" location is flashed (via OTA or YMODEM flashing) #1063
  • System.sleep SLEEP_MODE_DEEP timing accuracy and sleep STOP mode retains user interrupt handler after resuming #1051 fixes #1043 and #1029

INTERNAL

  • [Electron] Use floating point arithmetic in PWM to save about 1KB of flash space #1027
  • Feature/vendorlibraries #1009
  • [Electron] Added a 3rd system module to provide room for additional system firmware #1035
  • Remove accidental SYSTEM_MODE(MANUAL) from pwm.cpp in wiring/no_fixture #1052

v0.5.3-rc.1

BUGFIXES

  • SoftAP mode persisting when setup complete if Wi-Fi was off. #971
  • Free memory allocated for previous system interrupt handler #951 fixes #927
  • availableForWrite() was reporting bytes available instead of bytes available for write #1020 and #1017
  • millis()/micros() are now atomic to ensure monotonic values. Fixes #916, #925 and #1042
  • Fixes to I2C Slave mode implementation with clock stretching enabled #931
  • General I2C Improvements and MCP23017 tests #1047
  • Rebuilt Wiced_Network_LwIP_FreeRTOS.a WWD_for_SDIO_FreeRTOS.a on OSX #1057 fixes Local build stalling on object dump #1049
  • digitalRead() interfered with analogRead() #1006 fixes #993
  • Validates that module dependencies would still be satisfied after the module from the "ota_module" location is flashed (via OTA or YMODEM flashing) #1063

v0.5.2 (same as v0.5.2-rc.1)

ENHANCEMENTS

  • [Photon/P1] Restores the default WICED country to Japan #1014

BUGFIXES

  • .syncTime() and .unsubscribe() called on the system thread. Prevents issues when multiple threads try to send messages through the cloud connection or manage the network state shared memory. #1041

v0.5.1 (same as v0.5.1-rc.2)

FEATURES

  • [Electron] Added support in HAL for a SMS received callback handler.

v0.5.1-rc.1

FEATURES

  • Wi-Fi Country Code can be set to configure the available channels and power transmission. #942

ENHANCEMENTS

  • ARM GCC 5.3.1 compiler support

BUGFIXES

  • [Photon/P1] Fix a timing-critical bug in WICED that causes system freeze. #877
  • Tone not available on A7 after stop-mode sleep. #938
  • Regression in EEPROM emulation size. #983
  • [Electron] Wrong bitmask is provided for 4208 setting in power management #987

v0.5.0 (same as v0.5.0-rc.2)

FEATURES

  • Added SYSTEM_FLAG_WIFITEST_OVER_SERIAL1 which is disabled by default. Tinker enables this by default so that the Wi-Fi Tester is available during manufacturing. Also ensures TX/RX pins are not used for Serial1 by default, in case you want to use these as GPIO. 945

ENHANCEMENTS

  • Timer::isActive() function added #950
  • mbedtls headers are private to the communications module now, so user applications can include their own version of mbedtls

BUGFIXES

  • Soft AP Claim code fix #956
  • Variable template fix #952
  • TCPClient on Electron not receiving all of the data for small files #896

v0.5.0-rc.1

FEATURES

ENHANCEMENTS

  • Compiler error with variable/function names that are too long. #883
  • DFU writes are verified #870
  • [Electron] NO_ACK flag on Particle.publish() disables acknoweldgements reducing data use #862
  • [Electron] Allow session to resume when IP changes. #848
  • [Electron] Ensure published events are received by the cloud before sleeping. #909
  • [Electron] SLEEP_NETWORK_STANDBY on System.sleep() #845
  • Serial baudrate to select ymodem mode includes listening mode #912
  • Wi-Fi connection process forced to timeout after 60 seconds if unsuccessful #898
  • Added write-verify-retry-fail logic to DFU writes #870
  • Support for USART (Serial1/2/4/5) data bits, parity and stop bits #757

BUGFIXES

  • targets program-cloud, program-dfu can be used without requiring all and will built the firmware correctly. #899
  • [Electron] Free socket when the socket is closed remotely #885
  • Extended CAN filters #857
  • I2C does not ensure a stop condition completes correctly in endTransmission #856
  • DAC1/2 possible problem with digitalWrite() after analogWrite() #855
  • Servo HAL: Do not disable timer if some of its channels are still in use #839
  • USB driver fixes and Serial.available() not returning values greater than 1 #812 #669 #846 #923
  • SOS During WiFi.scan() #651

INTERNALS

  • dynalib: compile-time check for certain types of ABI breaking changes #895

v0.4.9

FEATURES

ENHANCEMENTS

  • System.freeMemory() shows an accurate value for free memory rather than the highwater mark for the heap.
  • [threading] Entering listening mode does not block the system thread. #788
  • [threading] System times out waiting for unresponsive application when attempting to reset. #763
  • [threading] Particle.publish() doesn't block when in listening mode. #761
  • [threading]. delay()/Particle.process() pumps application events.
  • Serial, Serial1, SPI and EEPROM global objects guaranteed to be initialized before use. (Prevents White breathing LED if Serial used in a global instance constructor.)
  • [Software Timers]((https://docs.particle.io/reference/firmware/photon/#software-timers) have an option for one-shot timers, and support class member function callbacks.

BUGFIXES

  • RSA key generation would sometimes produce invalid keys. #779
  • Static IP configuration was not being used.
  • Interrupt on WKP with class method as an ISR #819
  • Memory leak configuring WiFi credentials via SoftAP (TCP/HTTP)
  • SPI DMA transfer callback invoked too early #791
  • Unset wiced_result_t for tcp clients in socket_send. #773
  • Update bootloader to support System.enterSafeMode(). #751
  • [threading] WiFi.listen(false) remains in listen mode. #743
  • Factory Reset doesn't clear WiFi credentials until network.connect(). #736
  • Comparison between IPAddress objects does not always work. #715
  • P1 dfu-util 0.8 does not read/write from External Flash. #706
  • DFU errors writing to flash silently ignored. #813
  • [threading] heap allocation not thread-safe. #826
  • System crash when button interrupt occurs during i2c transmission. #709
  • [photon] 'analogWrite()` to DAC pins. #671
  • [photon] analogWrite() to DAC pins requires pinMode() each time. #662
  • [photon] System.sleep(pin,edge) doesn't wake. #655

v0.4.8-rc.1

FEATURE

  • factory firmware uses full modular firmware #749. No need for UpdateZero.

  • Timer.changePeriod() #720

BUGFIXES

  • [photon] hang when UDP::stop() is called #742
  • [photon] I2C hangs with no pullup resistors #713

v0.4.7

FEATURES

ENHANCEMENTS

  • [multithreading] Application thread continues to run in listening mode
  • [multithreading] Particle.process() called from the application thread pumps application messages #659
  • Particle.variable() supports Strings #657
  • Simplified Particle.variable() API - variable type parameter is optional, and variables are passed by reference so &'s are not required.
  • I2C will generate STOP and SW Reset immediately if Slave Acknowledge failure is detected (must use pull-up resistors), instead of taking 100ms. commit

BUGFIXES

  • TCPClient unstable #672
  • Photon frequently SOS's immediately following cloud re-connect #663
  • String.toLower() has no affect on string. #665
  • SOS due to WICED socket handlers being called when socket is disposed. #663 #672
  • Application constructors executed after RTOS startup so that HAL_Delay_Milliseconds() can be called. This may mean that STARTUP() code executes just a little later than before, but can safely use all public APIs.
  • Ensure bootloader region is write protected.
  • White breathing LED on exiting listening mode. #682
  • WICED not resolving DNS names with 4 parts (it was trying to decode as an IP address.)
  • SoftAP via HTTP would fail on Safari due to request sent as multiple TCP packets. Fixed WICED HTTP server. #680
  • Retained variables are not persisting, even without reset or deep sleep. #661
  • Backup RAM enabled for monolithic builds #667
  • Pure virtual call on creation of low priority std::thread #652

v0.4.6

FEATURES

ENHANCEMENTS

  • [photon] WiFi.selectAntenna() setting is persistent, so the last selected antenna is used when the device is in safe mode. [#618]
  • Detect when the cloud hasn't been serviced for 15s and disconnect, so device LED state accurately reflects the connection state when the application loop has stalled. #626
  • Compile-time checks for Particle.variable() #619
  • [photon] Increased retry count when connecting to WiFi. #620
  • Setup button events #611

BUGFIXES

  • UDP.receivePacket() would fail if UDP.setBuffer() hadn't been called first. Thanks @r2jitu.
  • [photon] Default SS pin for SPI1 now set to D5. #623
  • [photon] Long delay entering listening mode. #566
  • [photon] Solid green LED when WiFi network cannot be connected to due to invalid key. (The LED now blinks.)
  • [photon] Storing more than 2 Wi-Fi credentials would sometimes give unpredictable results.
  • [photon] TX/RX pins did not work after entering listening mode. #632
  • [photon] Improvements to I2C for MCP23017 / Adafruit RGBLCDShield. #626

v0.4.5

FEATURES

  • SPI.setClockDividerReference, SPI.setClockSpeed to set clock speed in a more portable manner. #454
  • WiFi.scan function to retrieve details of local access points. #567
  • UDP.sendPacket/UDP.receivePacket to send/receive a packet directly to an application-supplied buffer. #452
  • Static IP Support [photon] - #451
  • [photon] UDP multicast support via UDP.joinMulticast/UDP.leaveMulticast. Many thanks @stevie67!
  • waitFor(WiFi.ready) syntax to make it easier to wait for system events. #415
  • Flexible time output with Time.format() #572

ENHANCEMENTS

  • Recipes and Tips section in the build documentation.
  • Particle.function, Particle.subscribe and attachInterrupt can take a C++ method and instance pointer. #534 Thanks to @monkbroc!
  • UDP.setBuffer to set the buffer a UDP instance uses for read/write. #224 and #452
  • WiFi.setCredentials() can take a Cipher type to allow full specification of an AP's credentials. #574
  • TCPClient (from TCPServer) reports remote IP address. #551
  • Configurable format in Time.timeStr(), including ISO 8601. #455
  • Servo.trim(adjust) to allow small adjustments to the stationary point. #120
  • Time set from the cloud accounts for network latency. #581
  • String(Printable) constructor so any Printable can be converted to a string. example
  • Fluent API on String - many methods return *this so method calls can be chained.
  • Small values passed to delay(1) result in more accurate delays. #260
  • Bootloader does not show factory reset modes if a factory reset image is not available. #557

BUGFIXES

  • Listening mode re-enters listening mode after credentials are given. #558
  • String function dtoa() has problems with larger numbers. #563
  • System doesn't set color of RGB LED when RGB.control(true) is called. #362, #472 and #544
  • WiFi.SSID() may not return previous network when switching. #560
  • [photon] System.sleep(5) not turning Wi-Fi back on after 5 seconds. #480
  • regression: floating point support in sprintf not compiled in. #576
  • [photon] SPI1 default clock speed was 7.5MHz, changed to 15MHz, same as for SPI.
  • TCPClient::connected() doesn't detect when the socket is closed #542
  • dfu-util: error during downlod get_status msg removed when using :leave option #599
  • [Core] A0 could not be used as an output #595
  • Reinstate CFOD handling on the Photon.

v0.4.4

FEATURES

  • logging output documentation
  • pressing 'v' in SoftAP mode displays the system version. FIRM-128
  • P1: API (compatible with Core) to access the 1MByte external flash. #498
  • Arduino compatibility macros for PROGMEM and more.
  • RGB.onChange handler receives notification of the current LED color when it changes. Can be used to match an external LED to the onboard led. #518 Thanks to @monkbroc!
  • Serial2 available on P1 and Photon (note: this also requires above RGB.onChange handler and two resistors would need to be removed on the Photon)
  • Spark.connected() et al. is now Particle.connected(). The former Spark library is still available but is deprecated.
  • System.freeMemory() API to determine the amount of available RAM.
  • STARTUP() macro to define blocks of code that execute at startup.

ENHANCEMENTS

  • Retrieve the LED brightness via RGB.brightness()
  • More prominent color change on the RGB LED when there is a cloud connection error.
  • System.sleep() - 2nd parameter changed to InterruptMode from uint16_t to ensure the correct types are used. #499
  • Less aggressive exponential backoff when the re-establishing the cloud connection. [FIRM-177]
  • I2C Wire.endTransmission() returns unique values and I2C docs updated
  • Generate I2C STOP after slave addr NACK, I2C software reset all timeouts - commit
  • Improved I2C Master receive method and implemented error handler - commit - commit
  • WiFi.selectAntenna() default antenna is now INTERNAL. Can be called at startup (before WiFi is initialized to select the desired antenna.

BUGFIXES

  • [Regression] System connects WiFi when Spark.connect() is called after WiFi.on() #484
  • Debug build now working.
  • PWM issue fixed - 500Hz output on all channels #492
  • Tone issue fixed on D2,D3,RX,TX #483
  • SOS when registering more than 2 subscription handlers, and allow 4 subscription handlers to be successfully registered. #531
  • SOS on TCPClient.connect() when DNS resolution failed or when connection fails #490
  • TCPClient::stop() does not work on first connection #536
  • TCPClient::connect() does not close an existing socket. #538
  • TX/RX PWM randomly inverted #545
  • UDP.begin/write return values #552

v0.4.3

FEATURES

  • Half-duplex mode on Serial1 via Serial1.halfdupliex(). Thanks to @prices.
  • WiFi.connect(WIFI_CONNECT_SKIP_LISTEN) allows application firmware to skip listen mode when there is no credentials.
  • System events

ENHANCEMENTS

  • I2C methods now use micros() for timeouts rather than millis(), so I2C functions can be used in an interrupt handler. #460
  • WiFi.listen(false) to programmatically exit WiFi listening mode.
  • make is verbose by default. To silence, add -s to the command line.
  • WiFi.connect(WIFI_CONNECT_SKIP_LISTEN) starts connection but does not enter listening mode if no credentials are found.
  • Setup/Mode button now starts listening mode when WiFi is off.
  • WiFi.listen(false) can be used to exit listening mode (from an interrupt.)
  • LED flashes high-speed green when requesting an IP address via DHCP.

BUGFIXES

  • [Photon/TCPServer] - TCPClient.connected() was not returning false when the socket was asynchronously disconnected.
  • Fix time being reset on wakeup. (removed WICED RTC init code that resets to default preset time in platform_mcu_powersave_init() within photon-wiced repo.) #440
  • TCPClient.connected() was not returning false when the socket was disconnected from the other end.
  • strdup() was returning garbage #457
  • attachInterrupt() should work on all interrupt pins now except D0 & A5. Please note there are shared lines as per the following issue comment : [#443] (https://github.com/spark/firmware/issues/443#issuecomment-114389744)
  • I2C bus lockup when no slave devices are present by issuing a STOP condition after sLave send address fails.
  • spark/ events not propagated to application handlers. #481
  • sprintf calls not linking correctly. #471
  • Photon/P1 sometimes did not start without hitting reset after a cold boot.
  • Disable LTO compile for user firmware since it causes linking problems (see sprintf above.)

v0.4.2

FEATURES

  • EEPROM storage of custom data types via EEPROM.put() and `EEPROM.get()'
  • When the device is in safe mode, the LED breathes magenta
  • attachSystemInterrupt() allows hooking key system interrupts in user code.
  • DMA-driven SPI master
  • UDP.sendPacket() method avoids buffering data when the user can supply the entire buffer at once.
  • [Photon] SoftAP setup can be done over HTTP
  • platform-neutral fast pin access 449
  • [P1] Serial2 support

ENHANCEMENTS

  • [Photon] The system firmware updates the bootloader to latest version
  • [Photon] The system write protects the bootloader region.
  • UDP uses dynamically allocated buffers
  • PRODUCT_ID and PRODUCT_VERSION place these details at a known place in the firmware image
  • DFU mode and serial firmware update can be triggered by setting the line rate.

BUGFIXES

  • Serial1.end() hangs the system
  • Malformed CoAP acknowledgement message in cloud protocol.
  • SPARK_WLAN_Loop() was not linked. (Workaround was to use Spark.process())
  • UDP doesn't send anything to the device until UDP.write() #407
  • Divide by zero now caught and causes a SOS.
  • Floating-point support for sprintf() reinstated
  • Fixed WICED DCT becoming unmodifiable
  • Fix UDP.parsePacket() not receiving any data on the Photon #468

v0.4.1

ENHANCEMENTS

  • Signed Photon USB Driver for use with Windows 8.1

BUGFIXES

  • Spark.syncTime() was not linked. #426
  • Wire.setSpeed(CLOCK_SPEED_100KHZ) was not linked. #432
  • WiFi.selectAntenna() was not linked.

v0.4.0

NEW PLATFORMS

  • PHOTON!!!!

ENHANCEMENTS

  • loop() iteration rate increased by 1000 times - from 200 Hz to over 200 kHz!
  • Compiler: Removed all warnings from the compile (and made warnings as errors) so compiler output is minimal.
  • Debugging: SWD Support, thanks to Elco Jacobs. #337
  • Spark.publish() returns a success value - #388
  • Spark.process() as the public API for running the system loop. #347
  • Sleep no longer resets (on the Photon) #283
  • Support for application code outside of the firmware repo. #374
  • MAC Address available in setup via 'm' key. #352
  • SoftAP setup on the Photon
  • Spark.sleep() changed to System.sleep() and similarly for deviceID() #390
  • Listening mode uses existing serial connection if already opened. #384
  • Spark.publish("event", PRIVATE) shorthand - #376
  • Improved integrity checks for firmware images
  • Added additional safe/recovery mode in bootloader (> 6.5 sec : restore factory code without clearing wifi credentials)
  • Enabled CRC verification in bootloader before restoring/copying the firmware image from factory reset, ota downloaded area etc.
  • Added 'program-serial' to build target to enter serial ymodem protocol for flashing user firmware (Testing pending...)
  • Cloud string variables can be re-defined #241
  • Removed hard-coded limit on number of functions and variables #111
  • Parameterized function callbacks, lambda support for functions #311
  • C++ STL headers supported
  • Can duplicate the onboard RGB LED color in firmware. #302
  • WiFi.selectAntenna() - select between internal (chip) and external (u.FL) antenna on Photon: #394
  • WiFi.resolve() to look up an IP address from a domain name. #91
  • System.dfu() to reboot the core in dfu mode, until next reset or next DFU update is received.

BUGFIXES

  • SOS calling Spark.publish() in SEMI_AUTOMATIC/MANUAL mode
  • Subscriptions maintained when cloud disconnected. #278
  • Fix for events with composite names. #382
  • WiFi.ready() returning true after WiFi.off() in manual mode. #378
  • Serial.peek() implemented. #387
  • Mode button not working in semi-automatic or manual mode. #343
  • Time.timeStr() had a newline at the end. #336
  • WiFi.RSSI() caused panic in some cases. #377
  • Spark.publish() caused SOS when cloud disconnected. #322
  • TCPClient.flush() discards data in the socket layer also. #416

UNDER THE HOOD

  • Platform: hardware dependencies are factored out from wiring into a hardware abstraction layer
  • Repo: all 3 spark repos (core-common-lib, core-communication-lib, core-firmware) are combined into this repo.
  • Modularization: factored common-lib into platform, services and hal modules.
  • Modularization: factored core-firmware into wiring, system, 'main' and user modules.
  • Modularization: user code compiled as a separate library in the 'user' module
  • Build system: fancy new build system - build/readme.md
  • Modularization: modules folder containing dynamically linked modules for the Photon

v0.3.4

FEATURES

ENHANCEMENTS

  • Wiring: More efficient and reliable print(String) (fix issue #281) #305
  • DFU: Add DFU suffix to .bin file #323

BUGFIXES

  • I2C: Use I2C polling mode by default #322
  • Listening Mode: Fix hard fault when Wi-Fi is off #320
  • LED Interaction: Fix breathing blue that should be blinking green #315

v0.3.3

FEATURES

  • Cloud: Secure random seed. When the spark does a handshake with the cloud, it receives a random number that is set as a seed for rand()
  • Wiring: Arduino-compatible random() and randomSeed() functions. #289
  • Wiring: Arduino-compatible functions like isAlpha() and toLowerCase(). #293

ENHANCEMENTS

  • Wire: added missing Slave mode using DMA/Interrupts and updated Master mode using DMA. New APIs Wire.setSpeed() and Wire.strechClock(). #284
  • Sleep: Spark.sleep() supports wakeup on pin change. #265

BUGFIXES

  • RGB: calling RGB.brightness() doesn't change the LED brightness immediately #261
  • Wiring: pinMode() INPUT and OUTPUT constants had reversed values compared to Arduino. #282
  • Wiring: compiler error using HEX with String. #210
  • System Mode: MANUAL mode breaks OTA update #294

pre v0.3.3 versions

See https://github.com/spark/core-firmware/releases