***

eCxx Release Changelog
======================

***


Version 1.0.8-vs
----------------

### Software - All

+ A simple driver for generic, HUB75-based LED panel \(**GenericHUB75Driver<T>**\) has been added; new test applications have also been added to test this new feature.

+ Some wrapper classes for convenience shortcuts when using various combinations of **ColorFX1D<T>**, **ColorFX2D<T>**, **ColorAnimator1D<T>**, **ColorAnimator2D<T>**, and **GenericSPILEDDriver<T>** classes have been added. Please include the header file **eCxx\_SPILEDDriver1DShortcut.h** or **eCxx\_SPILEDDriver2DShortcut.h** to use them.

+ Various enhancements, bug fixes, and cleanups.

***


Version 1.0.7-vs
----------------

### Software - All

+ A simple driver for generic, SPI-like, addressable digital LED \(**GenericSPILEDDriver<T>**\) has been added; new test applications have also been added to test this new feature.

+ More ready-to-use animation processor classes for the **ColorAnimator2D<T>** class have been added.

+ Two new special base classes \(**Uninstantiable** and **Uncopyable**\) have been added. Some parts of the source code have been refactored using these new classes.

+ Various enhancements, bug fixes, and cleanups.

***


Version 1.0.6-vs
----------------

### Host PC

+ The Java based tool for simulating LED strip and matrix \(**LEDSimulator.java**\) has been improved. It now supports HSV and HSL color types.

### Software - All

+ A 2-dimensional color animator class **\(ColorAnimator2D<T>\)** has been added \(complete with some ready-to-use animation processor classes\). Please include the header file **eCxx\_ColorAnimator2D.h** to use them. A new test application has also been added to test this new feature.

+ A simple color generator class \(**ColorGenerator2D\_OffOn<T>**\) has been added \(for use with some 2-dimensional animation processor implementations\).

+ Various enhancements, bug fixes, and cleanups.

### Software - x86

+ Some helper functions to generate and execute simulation data files for 2-dimensional LED simulation have been added. Please include the header file **eCxx\_SDF.h** to use this feature. Currently, only simulation data files with **RowMajor** and **HSVColor**/**HSLColor**/**WColor**/**RGBColor**/**RGBWColor** formats can be generated.

+ The helper functions to generate and execute simulation data files for 1-dimensional LED simulation now also support **HSVColor**, **HSLColor**, **WColor**, and **RGBWColor** formats.

### Software - NodeMCU

+ Using classic library and new library \(**newlib 4.0.0**\) are now supported \(the library selection will depend on the selected GCC that will be used to build eCxx\). Due to incomplete header files in older versions of ESP8266 add-on packages for Arduino IDE, the minimum package version currently supported is from version 2.5.0 \(previously, it was from version 2.4.0\). Please note that using newlib 3.3.0 is no longer supported.

+ Some parts of the networking \(WiFi\) sub-system have been reimplemented \(following some updates from the upstream Arduino ESP8266 GIT repository\).

***


Version 1.0.5-vs
----------------

### Host PC

+ The Java based tool for simulating LED strip and matrix \(**LEDSimulator.java**\) has been improved.

### Software - All

+ A simple color generator class \(**ColorGenerator1D\_OffOn<T>**\) has been added \(for use with some 1-dimensional animation processor implementations\).

+ More ready-to-use animation processor classes for the **ColorAnimator1D<T>** class have been added.

+ Refactoring of built-in colors; now they are normal global constants \(they were functions that return constant color objects\).

+ Support for direct digital configure, read, and write have been added to all supported platforms via the **PinDDX<T>** classes. Please include the header file **eCxx\_DDX.h** to use this feature. New test applications have also been added to test this new feature.

+ All graphics-related header and source files have been moved into their own sub-directories \(except for the corresponding **eCxx\_\*.h** header files\).

+ All pin-mapping-related header files have been moved from **src/eCxx/Platform/\*** directories to **include/eCxx/Platform/\*** directories.

+ Various enhancements, bug fixes, and cleanups.

### Software - x86

+ Some helper functions to generate and execute simulation data files for 1-dimensional LED simulation have been added. Please include the header file **eCxx\_SDF.h** to use this feature. Currently, only simulation data files with **RowMajor** and **RGBColor** formats can be generated.

***


Version 1.0.4-vs
----------------

### Host PC

+ The source code files of eCxx's Java based tools are now put inside the **tools/src** directory.

+ A new Java based tool for simulating LED strip and matrix \(**LEDSimulator.java**\) has been added.

### Hardware

+ The non-development version of JTAG2UPDI and serial bridge board using Arduino Micro and Arduino Pro-Mini \(**JTAG2UPDI\_Serial\_Bridge\_Micro\_ProMini\_ND**\) have been added. In this version, non essential components and connections have been removed. The PCB design is also modified for a normal PCB manufacturing \(no longer for perfboard assembly guide\).

### Software - All

+ A 1-dimensional color animator class **\(ColorAnimator1D<T>\)** has been added \(complete with some ready-to-use animation processor classes\). Please include the header file **eCxx\_ColorAnimator1D.h** to use them. New test applications have also been added to test this new feature.

+ The **Application::processEvent\(\)** function has been improved. Now, passing **false** when calling it will cause the system to not blink the activity indicator LED. Therefore, although the system will still blink the activity indicator LED under certain conditions, the user code is free to use the LED in other conditions. These are the conditions when the system will explicitly set the pin that controls the activity indicator LEDs to output mode and blink the LED:

    + The user code calls **Application::initialize\(\)**
    + The user code calls **Application::halt\(\)**
    + OTA programming is executed/in progress \(for NodeMCU platform only\)

+ Refactoring of **PinMapping.h** and **PinName.h** header files.

+ Math utility functions for calculating GCD \(greatest common divisor \) and LCM \(least common multiple\) have been added.

+ Various enhancements, bug fixes, and cleanups.

### Software - NodeMCU

+ OTA programming callback functions and error message handling have been improved.

+ Following some updates from the upstream Arduino ESP8266 GIT repository, a new makefile variable \(**MORE\_IRAM**\) has been added. It allows the user to select between balanced mode \(32 kB IRAM \+ 32 kB cache\) and more IRAM mode \(48 kB IRAM \+ 16 kB cache\) when building eCxx and its test applications and firmware. The default mode is the balanced mode.

+ The hardware and system information class \(**HWInfo**\) has been improved \(it can now obtain the IRAM and ICACHE sizes\). The member function **maxFreeBlockSize\(\)** has also been renamed to **maxHeapFreeBlockSize\(\)**.

***


Version 1.0.3-vs
----------------

### Host PC

+ The Python script **tools/ResetCaterina.py** has been renamed to **tools/ResetToBootloader.py**.

### Hardware

+ The schematic and PCB design for JTAG2UPDI and serial bridge board using Arduino Micro and Arduino Pro-Mini \(**JTAG2UPDI\_Serial\_Bridge\_Micro\_ProMini**\) have been added.

### Software - All

+ All hardware UART driver implementations now support changing baudrate without shutting down the UART. Ongoing transmissions of the transmitter and receiver will be corrupted when the baudrate is changed, therefore, an appropriate protocol must be implemented in the user application to handle this.

+ Various enhancements, bug fixes, and cleanups.

### Software - AVR \(Only for MCUs with Built-In USB Device Modules\)

+ A Function \(one for each **VUART**\) to set a user callback to be called when the USB host change the serial port setting\(s\) have been added to the **Application** class.

+ A function to set a user callback to be called when the USB host opens **VUART0** with the magic baudrate and set the **DTR** line to low has been added to the **Application** class. If this user callback is set, then instead of resetting the MCU to run the bootloader, the driver will call the user callback.

+ A new firmware \(**J2U_Ser_Bridge_Micro**\) has been added. This firmware is for the Arduino Micro part of the JTAG2UPDI and serial bridge board.

### Documentation

+ All documentation files that were located in the project's root directory have been moved to the **docs** directory.

+ The Markdown files of the project's SourceForge wiki pages are now included in the **docs** directory.

***


Version 1.0.2-vs
----------------

### Host PC

+ Both the 32-bit and 64-bit versions of mklittlefs are now included in the eCxx distribution package. This will come in handy if the installed Arduino core for ESP8266 WiFi chip does not include the mklittlefs utility.

### Software - All

+ A simple driver for MAX72XX-based 7-segment module \(**MAX72XXSevenSegmentDriver**\) has been added; new test applications have also been added to test this new feature.

+ More color buffer layout policies have been added.

+ Various enhancements, bug fixes, and cleanups.

### Software - AVR

+ On AVR MCUs with built-in USB device modules, the eCxx USB driver ignores the serial port settings \(baudrate, character size, parity, and the number of stop bits\) and always communicates with the host PC using the USB speed. However, because those serial port settings may be needed to implement certain applications \(such as USB to serial bridge\), new functions to obtain those settings from both virtual UARTs \(**VUART0** and **VUART1**\) have been added to the **Application** class.

### Software - NodeMCU

+ The PWM generator logic has been reimplemented \(following some updates from the upstream Arduino ESP8266 GIT repository\).

+ Some NTP \(Network Time Protocol\) and other date-time related functions have been added in the **Application** class. The **WiFiStation** test application has been renamed to **WiFiStationAndNTP** and updated to test this new feature. Please note that in order to use the predefined timezone names with NTP, the new header file \(**TZName.h**\) needs to be included from user applications.

***


Version 1.0.1-vs
----------------

_**The first virtual stable \(continuous improvement\) release.**_

### Host PC

+ Various enhancements, bug fixes, and cleanups on the build system and tools.

### Software - All

+ Various enhancements, bug fixes, and cleanups.

***


Version 1.0.0-rc2
-----------------

### Host PC

+ The build system for the NodeMCU platform has been slightly improved. It now supports uploading compressed user binaries \(both signed and unsigned\) via the OTA programming support \(use the makefile variable **COMPRESS\_OTA\_BINARY** to enable it\). Although uploading a compressed binary will speed up the upload process, the system restart process will take significantly longer time because the bootloader will need to decompress the binary. This, in turn, will increase the chance of corruption in case of power failure. This is why this feature is not enabled by default. Uploading compressed LittleFS images via over-the-air programming \(OTA\) support is not supported.

+ A simple Bash script \(**check\_build\_all.sh**\) has been added; this script will help in performing eCxx build checks for all supported platforms with various configurations. You will need to edit the build tool locations, check lists, and other configurations which are defined in the **execCheckXXX\(\)** functions to match your system configuration.

+ A simple Bash script \(**tools/tzname/generate.sh**\) to generate the header file **TZName.h** has been added. Currently the header file is not yet used.

### Software - All

+ The eCxx::function<T> and eCxx::Ext::function<T> classes are now stable and should work properly. However, mixing them with std::function<T> would cause additional overhead.

+ Various enhancements, bug fixes, and cleanups.

### Software - NodeMCU

+ Starting from this release, WiFi sleep mode is disabled upon application initialization \(**WIFI\_NONE\_SLEEP**\).

***


Version 1.0.0-rc1
-----------------

_**The first release candidate.**_

### Host PC

+ The Bash script \(**find\_tools.sh**\) has been slightly improved.

+ New makefile targets to create and upload LittleFS images have been added \(available for NodeMCU platform only\). Uploading signed LittleFS images is not supported.

### Software - All

+ Various enhancements, bug fixes, and cleanups.

### Software - NodeMCU

+ Starting from this release, the **eagle.flash.4m2m.ld** linker script is used \(in previous releases **eagle.flash.4m1m.ld** was used\). It means more file system data can be stored in the internal flash \(~2 MiB vs ~1 MiB\). However, it would also mean that atomic file system updating via OTA programming can no longer be enabled.

***


Version 0.9.9-beta5
-------------------

### Software - All

+ Various enhancements, bug fixes, and cleanups.

### Software - NodeMCU

+ The support for IPV6 in lwIP \(Lightweight IP stack\) is now included with eCxx. Edit the **LWIP\_IPV6** variable in **Makefile.config.nodemcu** to enable it.

+ A new member function **size\_t Application::getNetIfDescList\(NetIfDesc\* resBuff, size\_t buffLen\)** has been added. This function can be used to get a list of network interface descriptions. The **HWInfo** test application has also been updated to test this new feature.

+ A new header file **eCxx\_WebServerStreamSlotFS.h** has been added. Include this header file to stream data \(file\) from SlotFS to web server. A new test application has also been added to test this new feature.

+ A new test application for testing file uploads via a web server \(**WebServerUpload**\) has been added.

+ Refactoring of the **TCPClient**, **TCPServer**, **WebServer**, and **WebServerSSL** classes to minimize symbol pollution.

***


Version 0.9.9-beta4
-------------------

### Host PC

+ A simple Bash script \(**find\_tools.sh**\) has been added; this script will help finding the latest version of GCC and other build tools in your system.

### Software - All

+ The **ColorFX2D<T>** class has been improved; it now supports:

    + Setting all colors from program memory.

    + Extracting a vertical strip, a horizontal strip, and a block of colors.

+ Four new program memory helper functions have been added:

    `constexpr PGMCharPointer stdPGMCharPointer<ValueT>(const ValueT* ptr);`

    `constexpr PGMCharPointer stdPGMCharPointer<ValueT, N>(const ValueT (&ptr)[N], size_t idx);`

    `constexpr PGMCharPointer stdPGMCharPointerFar<ValueT>(const ValueT* ptr);`

    `constexpr PGMCharPointer stdPGMCharPointerFar<ValueT, N>(const ValueT (&ptr)[N], size_t idx);`

+ A new method to put inline string literals in program memory has been added. This new feature needs the N3599 extension \(literal operators for string literals\) that should be supported by all standard GCC versions in C++14 mode. Please edit the **CPP\_VER** variable in **Makefile.main** to change **c++11** to **c++14** \(please note that the GCC that is packaged with Arduino core for ESP8266 WiFi chip version 2.7.4 has not yet supported C++14\). These are the new literal operators:

    `inline PGMCharPointer operator "" _pgm();`

    `inline PGMCharPointerFar operator "" _pgmf();`

+ Various enhancements, bug fixes, and cleanups.

**Note:**

+ Unlike **PGM\_PTR<ValueT>\(\)**, **PGM\_PTR<ValueT, N>\(\)**, **PGM\_PTR\_FAR<ValueT>\(\)**, and **PGM\_PTR\_FAR<ValueT, N>\(\)** that will return **BasicPGMPointer<const ValueT\*>** and **BasicPGMPointerFar<const ValueT\*>**, the new program memory helper functions will always return **PGMCharPointer** and **PGMCharPointerFar** respectively.

### Software - AVR

+ A new test application to test a larger \(32x16\) MAX72XX-based LED matrix has been added. It is an implementation of John Conway's Game of Life.

+ The support ATmega4809 has been verified to work using Arduino Nano Every.

+ DFP support has been tested to work using **Atmel.ATmega\_DFP.1.4.351.atpack** and **Atmel.ATmega\_DFP.1.5.362.atpack**.

### Software - NodeMCU

+ The support for using custom Xtensa LX106 GCC has been verified to work using **GCC 10.2.0** which is downloaded from [<https://github.com/earlephilhower/esp-quick-toolchain/releases/download/3.0.0-gnu13/x86_64-linux-gnu.xtensa-lx106-elf-2f311fd.200918.tar.gz>].

***


Version 0.9.9-beta3
-------------------

### Software - All

+ The MAX72XX-based LED matrix driver \(**MAX72XXMatrixDriver**\) has been improved; a new test application has also been added to test this new feature.

+ A simple **ColorFX2D<T>** based painter \(**ColorFX2DPainter<T>**\) has been added; a new test application has also been added to test this new feature.

+ A simple 2D sprite sheet implementation \(**SpriteSheet2D<T>**\) has been added; a new test application has also been added to test this new feature.

+ More color buffer layout policies have been added.

+ More utility templates and template functions similar to C++11 have been added \(some with different names\).

+ Various enhancements, bug fixes, and cleanups.

***


Version 0.9.9-beta2
-------------------

### Software - All

+ A simple BCM \(binary code modulation\) waveform generator \(**BCMOutput**\) has been added; new test applications have also been added to test this new feature.

+ A simple driver for WS2812B LED strip and matrix \(**WS2812BDriver**\) has been added; new test applications have also been added to test this new feature.

+ A simple driver for MAX72XX-based LED matrix \(**MAX72XXMatrixDriver**\) has been added; new test applications have also been added to test this new feature.

+ Improvements in the **ColorFX1D<T>** and **ColorFX2D<T>** classes; more color buffer layout policies have also been added.

+ Various enhancements, bug fixes, and cleanups.

**Note:**

+ Please include the header file **eCxx\_LEDDriver.h** to use the above waveform generator and LED drivers.

### Software - AVR

+ A simple wrapper class for timer/counter 1 \(**TimerCounter1**\) has been added; a new test application have also been added to test this new feature.

+ The support for AT90USB646 and AT90USB1286 is no longer experimental.

+ The support for ATmega808, ATmega1608, ATmega3208, ATmega4808, ATmega809, ATmega1609, ATmega3209, and ATmega4809 is no longer experimental.

+ The support for ATmega48PB, ATmega88PB, ATmega168PB, and ATmega328PB is no longer experimental.

### Software - NodeMCU

+ Bug fix in the **TCPConsole** class.

***


Version 0.9.9-beta1
-------------------

_**The first beta release.**_

### Software - All

+ Refactoring of the main header file. In all previous alpha-beta releases, only one header file \(**eCxx.h**\) needs to be included from user applications in order to use all the eCxx features; from this release onward, the header file has been split into:

    + **eCxx.h**
      : for all basic features of eCxx.

    + **eCxx\_ColorSpace.h**
      : for data types and utility functions related to color spaces and effects.

    + **eCxx\_InputDevice.h**
      : for analog joystick, keypad, and switch.

    + **eCxx\_LCD.h**
      : for character LCD driver with its various output methods \(4-bit parallel, TWI, and UART\).

    + **eCxx\_MemoryCard.h**
      : for raw memory card access and slot-based file system.

    + **eCxx\_Server.h**
      : for TCP console, TCP server, and web server.

+ The **AnalogJoystick<T>** class has been improved. It now requires an additional template parameter \(**ADCDriverT**\); by default the template parameter is substituted with the **Application** class. If it needs to be configured to use an external ADC reader/driver, a customized class can be implemented. The class implementation must have at least these static member constants and functions implemented:

    `using Application_Base::PinMode;`

    `using Application_Base::InvalidPin;`

    `static constexpr uint8_t ADCPinMin = <some value>;`

    `static constexpr uint8_t ADCPinMax = <some value>;`

    `static void setPinMode(uint8_t pin, PinMode mode);`

    `static uint16_t analogRead(uint8_t pin);`

+ The **Convert** and **BasicOutputWriter<T>** classes have been improved and optimized.

+ Some color space utility functions and color effect classes have been added \(complete with their test applications\).

+ Various enhancements, bug fixes, and cleanups.

### Software - AVR

+ A new test application has been added to show how to use bit banging to control WS2812B LEDs.

### Software - NodeMCU

+ Added simple and thin wrapper classes for NodeMCU's WiFiServer, ESP8266WebServer, and ESP8266WebServerSecure classes so that the public API will look more consistent with other parts of eCxx.

***


Technical Release 7
-------------------

_**With this release, all eCxx primary features are finally complete!**_

### Software - All

+ A one-wire software UART class \(**OneWireSoftUART**\) has been added \(complete with its test applications\).

+ Various enhancements, bug fixes, and cleanups.

### Software - AVR

+ A simpler analog comparator class \(**AnalogComparatorLite**\) has been added for classic AVR platform \(complete with its test application\).

+ Fixed watchdog timer initialization in AVRX platform.

+ Fixed SPI frequency initialization in AVRX platform.

+ Added the support for **USERROW** read and write in AVRX platform.

+ Added the support for power-down and wake-up in AVRX platform.

***


Technical Release 6
-------------------

### Host PC

+ Two **AVRDUDE** configuration files are now included \(**3rd\_party/tools/avrdude.conf** and **3rd\_party/tools/avrdude-legacy.conf**\), just in case someone needs them. These files are copied from Arduino IDE installation packages.

+ A Python-based UPDI driver/program for programming new tinyAVR and megaAVR devices \(**pyupdi**\) has been included as a 3rd-party tool. The makefiles have been modified to support this tool.

+ The source code of a C-based UPDI driver/program for programming new tinyAVR and megaAVR devices \(**updiprog**\) has been included as a 3rd-party tool. The makefiles have been modified to support this tool. However, you will need to compile/build and install **updiprog** yourself.

+ The source code of **jtag2updi** has been included as a 3rd-party tool. You will need to compile/build and upload it yourself.

### Software - All

+ The maximum number of slots that can be opened simultaneously by **SlotFS** now depends on the total RAM of the target platform.

+ The hardware and system information class \(**HWInfo**\) has been improved.

+ Various enhancements, bug fixes, and cleanups.

### Software - AVR

+ Fixed errors in calculating total RAM and flash size.

+ The makefiles have been modified to support using optional device pack for newer AVR MCUs.

+ Removed the support for ATmega1281 and ATmega2561.

+ Added the support for AT90USB646 and AT90USB1286 \(with the same USB driver as ATmega16U4 and ATmega32U4\).

+ Added the support for ATmega48PB, ATmega88PB, ATmega168PB, and ATmega328PB \(experimental\).

+ Added the support for ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209, ATmega4808, and ATmega4809 \(experimental\). These MCUs require AVR GCC at least version 8.1.0 or the AVR GCC which is included by **Atmel AVR 8-bit Toolchain** version 3.6.1 or later.

### Software - NodeMCU

+ A simple TCP console class \(**TCPConsole**\) has been added \(complete with its test application\).

+ The **RawMemoryCard** and **SlotFS** classes have now been verified to work properly in NodeMCU platform.

***


Technical Release 5
-------------------

### Host PC

+ The Python and Java based serial console applications now remove their always-on-top window attributes when they get focused for the first time \(clicked/activated by the user\).

+ Added an INF file **tools/eCxx\_CDC-ACM.inf** \(modified from LUFA example INF file\). This file might be needed for Windows 8.1 and earlier versions. However, the file has not been verified properly due to the lack of a test PC with Windows 8.1 and earlier versions.

### Software - All

+ A simple raw-mode memory card reader and writer class \(**RawMemoryCard**\) has been added.

+ A simple slot-based file system class \(**SlotFS**\) has been added.

### Software - AVR

+ The algorithm for resetting the MCU from the USB driver has been improved. This should prevent spurious resets in operating systems that unintentionally toggle the DTR line multiple times when opening serial ports.

+ Slight code size and RAM usage optimization by making some parts of the TWI driver code from being linked when they are not actually in use.

+ The source code should now compile with older versions of AVR GCC \(or some other versions with buggy/incomplete standard C libraries\).


+ A minimum LUFA 111009 source code is now included within the eCxx source code tree so that customized versions of Caterina bootloader can be built \(they are located in the **3rd\_party** directory\).

***


Technical Release 4
-------------------

### Host PC

+ Some Python and Java based tools have been added:

    + **tools/ResetCaterina.py**
      : reset the attached Arduino Leonardo \(and other compatible boards/systems\) to run its Caterina bootloader.

    + **tools/ResetMCUFromUSB.py**
      : reset the attached MCU to restart the user application \(it would not run the Caterina bootloader\).

    + **tools/SerialConsole.py3**
      : serial console applications that support both TTY and TCP.

    + **tools/SerialConsole.java**
      : serial console applications that support both TTY and TCP.

+ The makefiles have been modified to support the above applications. Simply type **make** and press enter to show all the available targets.

+ The **shadow\_init.sh** Bash script and the makefiles have been improved. They now support building user application in a shadow directory.

**Note:**

+ Both serial console applications try not to toggle the DTR line when started, except maybe at the first time when the MCU board has just been connected to a USB port and after uploading/programming.

+ The **Try Reset MCU** button in each serial console application \(TTY mode only\) can be used to reset the MCU.

+ The Java based serial console application is cross platform. However, in non Linux operating systems, it may always toggle the DTR line when the application is closed.

### Hardware

+ The **ESP01\_AVR\_Uploader** has now been verified to work using eCxx's own firmware.

### Software - AVR

+ Added the support for ATmega16U4 and ATmega32U4 with USB driver:

    + The driver supports two virtual UARTs.

    + The USB configuration descriptor might not be compatible with some operating systems. In those operating systems, the virtual UART\(s\) might not be properly enumerated.

    + In Linux, the first virtual UART would always be enumerated first and thus has a lower device number than the second one \(e.g. **/dev/ttyACM0** and **/dev/ttyACM1**\). However, in Windows they may be swapped \(e.g. **COM6** and **COM5**, instead of **COM5** and **COM6**\).

### Software - NodeMCU

+ The eCxx's own firmware for **ESP01\_AVR\_Uploader** is now working. Notable differences between ESP-LINK's and eCxx's firmware:

    + The eCxx's firmware only works in WiFi access point mode. It would limit the number of devices that can connect to the system, hence, improving security.

    + Only one connection can be opened at a time \(either serial console or program-uploading port\). This behavior mimics the USB-FTDI uploader's behavior.

    + Opening either the serial console or program-uploading port will reset the attached AVR MCU. This behavior also mimics the USB-FTDI uploader's behavior.

    + The eCxx's firmware does not save the UART baudrate. The baudrate can be configured by sending GET request to the embedded web server, for example:

        `curl http://esp01au.local/upload/baud?rate=57600`

        `curl http://esp01au.local/console/baud?rate=9600`

***


Technical Release 3
-------------------

### Hardware

+ Fixed wrong legends \(can be fatal!\) on **ATmega1284P\_DevBoard** PCB.

### Software - All

+ eCxx's own implementation of **WeakPtr<T>** class and its related utilities have been added.

+ BasicOutputWriter<T> now has printfString\(\), overloaded member functions for 64-bit integer, and overloaded member functions for boolean.


+ More test applications.

+ Various enhancements, bug fixes, and cleanups.

### Software - AVR

+ Added a simple read-write test application for eCxx **IO\_Expander** board. The design has now been verified to work at 5V.

### Software - NodeMCU

+ Added a simple read-write test application for eCxx **IO\_Expander** board. The design has now been verified to work at 3.3V.


+ The support for using custom Xtensa LX106 GCC has been verified to work using **GCC 9.3.0** which is downloaded from [<https://github.com/earlephilhower/esp-quick-toolchain/releases/download/3.0.0-gnu7/i686-linux-gnu.xtensa-lx106-elf-1b78db5.1588270932.tar.gz>]. Due to the stricter nature of the new version of GCC, many warnings might be generated when compiling.

+ The support for using custom Xtensa LX106 GCC has been verified to work using **GCC 10.1.0** which is downloaded from [<https://github.com/earlephilhower/esp-quick-toolchain/releases/download/3.0.0-gnu12/i686-linux-gnu.xtensa-lx106-elf-0474ae9.200706.tar.gz>]. Due to the stricter nature of the new version of GCC, many warnings might be generated when compiling.

***


Technical Release 2
-------------------

### Hardware

+ Bug fixes for **ESP01\_AVR\_Uploader** schematic and PCB. The design has now been verified to work with ESP-LINK to program AVR MCUs in both 5V and 3.3V modes.

### Software - All

+ eCxx's own implementation of **NumericLimits<T>** classes has been added.

+ eCxx's own implementation of **SharedPtr<T>** class and its related utilities have been added.

+ eCxx's own implementation of **UniquePtr<T>** class and its related utilities have been added.


+ A simple reader class for two-axis analog joystick with one switch \(push button\) has been added.

+ The behavior of **KeypadScanner** scanner class has been slightly changed. Initialization is now done via the begin\(\) functions instead of constructors.


+ Various enhancements, bug fixes, and cleanups.

### Software - NodeMCU

+ Updated to NONOSDK22x\_191122 \(the original NONOSDK221 is still included and can be selected by setting the makefile variable **USE\_LEGACY\_NONOSDK221**\).

+ Added the forgotten special C++ ABI code for NodeMCU \(copied from Arduino library code\).

+ The output-only DMA \(I2S\) support has been improved. A new test application has been added to show how to use DMA to control WS2812B LEDs.


+ Support for using custom Xtensa LX106 GCC \(by setting the makefile variable **CUSTOM\_GCC\_DIR**\) has been added. It has been verified to partially work using **GCC 5.2.0** which is downloaded from [<https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz>]. Because Xtensa LX106 GCC 5.2.0 generates larger code, some applications can not be properly built due to insufficient IRAM.

***


Technical Release 1
-------------------

### Software - All

+ A hardware and system information class \(**HWInfo**\) has been added.

+ The **CharacterLCD** class and its various output methods should now theoretically support character-LCDs with more than 80 characters \(larger than 40x2\) by utilizing the RW pin as pin E2.


+ Various software and hardware enhancements, bug fixes, and cleanups.

+ Some directories, files, and code refactoring.

### Software - AVR

+ ESP-LINK is now included as a 3rd-party tool. Support for remote AVR programming using it has been added to the makefiles.


+ More test applications.

### Software - NodeMCU

+ TWI communication in slave mode is now working.

+ Binary signing verification for OTA programming is now working.

+ A proper hostname can now be set when configuring the application, hence, mDNS should now function properly.


+ The **Application** class now supports switching to WiFi station mode.

+ Added the support for output-only DMA \(I2S\).

+ Arduino library ESP8266WebServer is now included within the eCxx SVN tree.


+ More test applications.

+ The work on eCxx's own firmware for **ESP01\_AVR\_Uploader** has been started.

***


Technical Release 0
-------------------

_**The first alpha-beta \(technical\) release.**_

***
