Sming

Sming - powerful open source framework simplifying the creation of embedded C++ applications.

LGPL-3.0 License

Stars
1.4K
Committers
103

Bot releases are hidden (Show)

Sming - v3.6.0

Published by slaff over 6 years ago

This is a major release containing fixes, new features and backwards-incompatible changes

Features

  • SmtpClient (#1380)
    A powerful asynchronous smtp client that allows sending emails directly from ESP8266.

    • support for authentication (PLAIN and CRAM-MD5)
    • support for faster transfer via PIPELINING
    • support for attachments ( as much and as big as the remote server allows)
    • support for UTF-8 text encoding
    • support for sending multiple emails using the same TCP connection
    • support for connection over SSL and support for STARTTLS (needs Sming to be compiled with ENABLE_SSL=1 )
  • MqttClient: changing server and port setting can be done in runtime (#1390)

  • Added support for Nextion displays. (#1389)

  • Added open collective badge and information for financial contributions. (#1398)

  • Added support for lambdas in the Timer class (#1378)
    Using C++11 std::function and std::bind

  • Added support for POST params and file upload via POST in the HttpClient. (#1381)

  • Exposed the remote port and ip for the connections. (#1370)

Changes

  • Improvements to the InfraRed libraries (#1318)

    • Added RingBufCPP library from Aaron Wisner
    • Updated IR lib sample
    • Fixed sign problem with JVC send when time elapsed is bigger than JVC_RPT_LENGTH - JVC_MIN_GAP
    • Reduced timer for IR sample application
    • Updated IRremoteESP8266 library to latest version
  • Replaced DHT library with DHTesp. Updated the samples accordingly. (#1341)

  • Improved design for the HttpConnection. (#1386)

    • (Before) By default the HttpConnection was storing all data coming back from the server. Meaning that a response body bigger than 30K will crash for sure the device.
    • (Now) By default the HttpConnection stores the first 1024 bytes. Thus by default the device will not crash with big response body.
      If a developer wants to use the httpclient and store more than 1024 bytes from the response, then he/she can set the response stream to be MemoryStream.
      Ex: request.setResponseStream(new MemoryStream());
  • Refactored the streams (#1377)

    • Moved the streams from SmingCore/Network/Http/Stream to SmingCore/Data/Stream. They will be used also in the coming SmtpClient.
    • Unified the stream transformation code and added it to StreamTransformer.
    • Removed deprecated method name from CircularBuffer.
    • Moved common data structures from HttpCommon.h to SmingCore/Data/Structures.h
    • Moved DataSourceStream, CircularBuffer and OutputStream to SmingCore/Data.
    • Added username and password processing in the URL.
  • Refactored SSL validators (#1379)

    • Allow creating fingerprint chain.
    • Allow multiple fingerprints from the same type to be in the chain. For example public key hash and a backup public key hash for the backup private key.
    • Move the fingerprinting to the TcpClient.
    • Unify the private key / certificate setting for both TcpClient and TcpServer.

Migration from v. 3.5.2 or earlier

Those changes will affect your code ONLY if you use DIRECTLY in your application the following classes.

  • HttpMultipartStream
    * HttpMultipartStream is renamed to MultipartStream
    * SmingCore/Network/Http/Stream/HttpMultipartStream.h is moved to SmingCore/Data/Stream/MultipartStream.h

  • HttpChunkedStream.h
    * HttpChunkedStream is renamed to ChunkedStream
    * SmingCore/Network/Http/Stream/HttpChunkedStream is moved to SmingCore/Data/Stream/ChunkedStream.h

  • DataSourceStream.h and OutputStream.h are now located in SmingCore/Data/Stream/.

    • CircularBuffer.h is moved to SmingCore/Data/.
    • URL - if you use protocol different than HTTP then the default port will be set to 0. In the previous versions the default port was always 80, no matter what the URL protocol was.
  • The deprecated TcpConnection::setSslFingerprint is removed. Use TcpClient::pinCertificate instead.

  • TcpConnection::setSslClientKeyCert is deprecated. Use TcpConnection::setSslKeyCert instead. It can be used on a server to set the server certificate used for encryption, or on a client to set a client certificate used for authentication.

    • All SSL fingerprinting is moved to the TcpClient as it is relevant only for the client SSL connections.
    • Calling multiple times TcpClient::pinCertificate will add multiple SSL validators. This is quite useful if you have one private key, that is currently used on the server, and another backup key, just in case the previous key gets compromised. In that case one can do the following:
    MqttClient mqttClient;
    // ...
    mqttClient.pinCertificate(fingerprintPublicKeyCurrent, eSFT_PkSha256); // first fingeprint
    mqttClient.pinCertificate(fingerprintPublicKeyEmergencyBackup, eSFT_PkSha256); // second fingerprint
    

    In the example above the first fingerprint will be checked. If it is valid no further checks will be done. If the first one fails then the next will be validated. If none of the fingerprints was valid then the connection will be rejected.

Fixes

  • Fixes to the postParams unescaping (#1402)
  • Fixes to the IR Library. (#1373)

All PRs merged in this release can be seen from here

For a complete list of changes run the following command:

git log 3.5.2..3.6.0

Thanks to everyone who helped us make this release happen.

Sming - v3.5.2

Published by slaff over 6 years ago

This is a minor release containing:

  • Updated version of the third-party http_parser.
  • Updated version of the third-party PWM library.
  • Small memory fixes.
  • Initial introduction and usage of C++11 std::function that will eventually replace Delegates.

All PRs scheduled for this release can be seen from here

For a complete list of changes run the following command:

git log 3.5.1..3.5.2

Thanks to everyone who helped us make this release happen.

Sming - v3.5.1

Published by slaff over 6 years ago

Sming v3.5.1 is here. With this minor version you will have more free heap memory at your disposal and less bugs.

Some of the changes in this release:

  • Unified the stream classes for better testability and reusability. (#1332) The length() method in the DataSourceStream classes is deprecated
  • MacOS compatibility issues. (#1316)
  • Memory Optimization: Moved C++ vtables into IRAM, out of HEAP. In some cases increased the free heap with 3K. (#1320)
  • Updated axTLS to its latest version and increased available free heap (#1329).
  • Decreased the default debug messages in the network layer (#1327) as part of our effort to provide better out-of-the-box experience (#1328)
  • Reorganization: Moved the tools under tools/ folder and added esptool2 as submodule as part of the better experience.
  • Fix: Added linker flags to allow the use of custom crash handlers in the user code. (#1326)
  • Small fix to the FreeBSD make mechanism.
  • HardwareSerial: Fix for zero availableCharsCount in callback ... (#1307)
  • Adds Cygwin32 build support (#1306)
  • Modified libemqtt & MqttClient to allow the publishing of binary messages (#1300)

All PRs scheduled for this release can be seen from here

For a complete list of changes run the following command:

git log 3.5.0..3.5.1

Thanks to everyone who helped us make this release happen.

Sming - v3.5.0

Published by slaff almost 7 years ago

Santa came earlier this year and we are ready with the new v3.5.0 release!

In it you will find the following new features and improvements

  • Fixed spiffs_mount to work with rBoot(#1292)
  • Added method to shutdown a TcpServer (#1272).
  • Added Adafruit_BME280 Library and Adafruit_Sensor support (#1286).
  • Improved websocket ping and pong commands (#1270).
  • Added experimental support for SDK 2.1 (#1264).
  • Added experimental support for LWIP2 (#1289)
  • Fixed memory leaks in the MQTT client and SSL handling.

All PRs that made it in this release can be found here:
https://github.com/SmingHub/Sming/milestone/13.

For a complete list of changes run the following command:

git log 3.4.0..3.5.0

Thanks to everyone who helped us make this release happen and especially to our first-time contributors!
You are awesome!

Sming - v3.4.0

Published by slaff almost 7 years ago

This release contains major changes related to better compatibility with Arduino.

Changes

  • Arduino compatibility improvements (#1213).
  • Library code for some Arduino libraries comes directly from their source repositories (Adafruit_ST7735, Adafruit_SSD1306).
  • Added dynamic recalculation of image offsets to prevent rom overlapping (#1208).
  • Added Wi-Fi Protected Setup (WPS) support (#1199).
  • Ram savings in axTLS (#1255).
  • Simplified and improved Http Client and Http Server stream handling (#1247).
  • Fixed Memory Leak in Mqtt (#1273).
  • Updated Spiffs code to version 0.3.7 + fixes (##1246).

And much more. All merged PRs in this release can be seen from here

Backwards-incompatible changes

  • Changed the order of Wire.begin and Wire.pins parameters to match the Arduino order (#1193).

For a complete list of changes run the following command:

git log 3.3.0..3.4.0

Thanks to everyone who helped us make this release happen.

Sming - v3.3.0

Published by slaff about 7 years ago

This release contains major changes related to Tcp stack, HTTP client and servers and Websocket processing.

Major Changes

  • Refactored HttpClient and HttpServer. See details (#1112).
  • Support for SSL session resumption in TcpConnection and TcpServer.
  • Custom PWM is enabled by default.
  • Multiple fixes to issues reported from Codacy's Vera++ and CppCheck reports.

And much more. All merged PRs in this release can be seen from here

Backwards-incompatible changes

  • Removed deprecated Station::waitConnection. If you need to migrate see how to use WifiEvents instead
  • WebSocket is renamed to WebSocketConnection to reflect better its meaning and intended use.
  • Removed the tightly coupled websocket methods inside the HttpServer. You can use WebSocketResource and add it to the HttpServer resource tree to achieve the same results.
  • Moved writeInit(), writeFlash(const u8 *data, u16 size) and writeEnd() methods from rBootHttpUpdate to rBootItemOutputStream.
  • TemplateFileStream::setVarsFromRequest needs to be refactored completely. The current code couples TemplateFileStream to HttpRequest, which is too restrictive. TemplateFileStream::setVars method should be introduced that accepts HashMap<String,String>
  • HttpRequest::getRequestMethod() is removed. Use HttpRequest::method instead.
  • CommandExecutor with WebsocketConnection won't work.

For a complete list of changes run the following command:

git log 3.2.0..3.3.0

Thanks to everyone who helped us in this new release.

Sming - Release Candidate 2 for version 3.3.0.

Published by slaff over 7 years ago

This version includes:

  • Optimizations to the Tcp stack.
  • Improvements to the HttpServer connection handling.
  • Fixes to the Websocket frame processing.

If there are no show-stoppers then this version will be the last RC version.

For a complete list of changes between RC1 and RC2 run the following command:

git log 3.3.0-rc1..3.3.0-rc2
Sming - Release Candidate 1 for version 3.3.0.

Published by slaff over 7 years ago

This version includes:

  • Refactored HttpClient and HttpServer
  • Support for SSL session resumption in TcpConnection and TcpServer.
  • Removed deprecated Station::waitConnection.
  • Custom PWM is enabled by default.
  • Multiple fixes to issues reported from Codacy's Vera++ and CppCheck reports.
Sming - v3.2.0

Published by slaff over 7 years ago

This is a clean-up release.

Some of the main changes include

Clean-up

  • Removed all code related to the Espressif bootloader. You should use rBoot as bootloader.
  • Deprecated WifiStation::waitConnect (#1071, #1072). WifiStation::waitConnect will be removed in the next version and replaced with WifiEvents.
  • Deprecated DriverPWM( aka Software PWM).

New features and fixes

  • Improved SSL fingerprinting - added code that allows checking the fingerprint of a public key. Useful in cases where the private key is reused for certificates over longer period of time. (#1034)
  • Added asynchronous AT command client ( to communicate with GSM/GPRS modules that use AT commands) (#1033)
  • Switched to i2c HAL and Wire libraries from the esp8266/Arduino project. (#1061)
  • Added NFC support (#1049)
  • Fixed SPI mode issues (#1083)

And multiple bug fixes to the code and the documentation.

All merged PRs in this release can be seen from here

For a complete list of changes run the following command:

git log 3.1.2..3.2.0

And last but not least this release would have been possible without the help of our fantastic contributors and community members. This time we give our special thanks to Jarek Zgoda who helped us clean a lot of old code and improve existing one.

Sming - v3.1.2

Published by slaff over 7 years ago

This release contains changes leading to more free heap space, faster tcp operations, faster and smaller Docker images, improved CI tests for Windows and more.

Changes

  • Fix compilation of native spiffy executable.
  • Linker script refactoring.
  • Docker images are now based on Alpine with Cloud9 and Xtensa GCC toolchain.
  • Added UDK on Windows to our CI system.
  • Moved debugf strings into SPI flash to preserve heap space.
  • Optional disabling of Command Executor to preserve heap and flash space.
  • Unified the memanalyzer input.

And much more. All merged PRs in this release can be seen from here

Requirements

  • Starting from this version having python version 2.7 or bigger is a requirement in order to be able to upload the compiled application to your device and be able to see the memory analysis.

For a complete list of changes run the following command:

git log 3.1.0..3.1.2

And last but not least this release would have been possible without the help of our fantastic contributors and community members. And again special thanks to ADiea who contributed a lot in this release and has a trove of features that promise even more improvements.

Sming - v3.1.1 Hotfix

Published by slaff over 7 years ago

Hotfix release based on v3.1.0 containing bug fixes for

  • spiffs_mount: It was not possible to mount SpifFS automatically
  • Custom LWIP compilation headers were not set correctly

For a complete list of changes run the following command:

git log 3.1.0..3.1.1
Sming - v3.1.0

Published by slaff over 7 years ago

This release contains major changes, new drivers and bugfixes.

Major Changes

  • Switched to using the open-source code of LWIP. This means more free heap and possibility to adapt the LWIP settings according to your network setup
  • Added support for SDK 2.0
  • Refactored HardwareSerial for better responsiveness and speed. Allowed the use of UART1.
  • Added hooks that will allow extending OTA with signed ROMs and encrypted OTA. See wiki for details.
  • Better Spiffs mounting logic
  • Initial support for YeeLight smart WiFi bulbs. ( #925 )
  • Initial support for AM2321 I2C sensor support.

And much more. All merged PRs in this release can be seen from here

Backwards-incompatible changes

  • spiffs_mount_manual() is using the actual Flash address. Before that it was using the memory-mapped address. If you used this function you should recalculate the mounting address using this formula: `new_address = (old_address - 0x40200000)
  • espconn_* functions are not enabled by default. If you are using them make sure to compile your application with ENABLE_ESPCONN=1.
  • HardwareSerial - there is RX buffer but if a more complex buffering is desired it has to be implemented inside the callback delegate. Also the callbacks will not receive every single character that was types but the latest one and all unread characters can be read from the buffer.
  • If you use esp-alt-sdk 1.4 you should patch it in order to be able to use custom LWIP.
  • With this version we officially support SDK 2.0 and 1.5. Support for 1.4 is removed.

For a complete list of changes run the following command:

git log 3.0.1..3.1.0

And last but not least this release would have been possible without the help of our fantastic contributors and community members. Special thanks to ADiea who contributed a lot in this release and has a trove of features that promise even more improvements.

Sming - v3.0.1

Published by slaff almost 8 years ago

Minor bug fix version that contains the following changes:

  • The master branch is our release branch. It contain now all submodules and patched sources directly applied in the source tree. This fixes issues with the release zip file (see #840 ) not containing all third-party submodules and missing the patches for them.
  • Better compilations with Windows UDK (#842)
  • Better documentation for Server and ServoChannel (#862)
  • Fix for samples/ScreenTFT_ILI9340-ILI9341 (#865)
  • Fixed compilation of Sming with custom heap based on umm_malloc (#868)

For a complete list of changes run the following command:

git log 3.0.0..3.0.1
Sming - v3.0.0 X-Mas

Published by slaff almost 8 years ago

We are having a fantastic Christmas release full of new features, performance and stability improvements.

Let’s mention a small part of them:

  • Better handling of third-party libraries. Sming is using code from other open source projects. Getting the latest version of that code used to be time consuming and error-prone process. In this version that is no longer the case. We can have the latest version of Spiffs, rBoot, axTLS, Esp-Gdbstub or Stefan Bruens PWM in seconds.
  • SSL support based on axTLS v2.1+. You can now send HTTP, MQTT or Websocket messages over SSL. This means that your small devices can securely report the temperature to a remote server.
  • Better fatal error reporting and support for custom crash handlers.
  • Improved WebSocket support.
  • Optional use of Stefan Bruens high-quality PWM library (as a drop-in replacement for the Espressif’s one)
  • Optional use of Umm-Malloc heap allocation for better usage of the available heap memory and prevention against heap fragmentation problems.
  • Faster SPI.
  • And many small or big bug-fixes, performance and stability improvements.

For a complete list of changes run the following command:

git log 2.1.5..3.0.0

Thanks to all of you that contributed to this fantastic major release and … Merry Christmas everyone!

Sming - V2.1.5

Published by slaff almost 8 years ago

This is the latest stable release of Sming.

What's new

  • It is now possible to create a Sming development environment using Docker
  • Better API and Wiki documentation. To generate it locally run make docs. The API generation requires doxygen.
  • Support for SI7021 and APA102.
  • Multiple bug-fixes.
Sming - V2.1.0

Published by hreintke almost 9 years ago

Generic

This is an Bugfix Release of Sming Framework.

Release notes

Supported Espessif SDK
NONOS SDK 1.5.0 (preferred)
NONOS SDK 1.4.0

Bugfixes
Fix Hex output on m_printf
Fix buffer overflow in m_printf
Fix out-of-bounds in reading from UART
Fix interrupt handling in UART SerialCallback'
Fix Template sending when field is on buffer end
Fix TelnetServer initialize member variables correctly

Repository updates
Samples moved to subdirectory
Allow project to add Modules in makefile

Sming - V2.0.0

Published by hreintke almost 9 years ago

Generic

This is an Update Release of Sming Framework.

Important Changes

  • No support for Espressif NONOS V1.3.0 or earlier
  • ArduinoJson version update from 4.2 to 5.0.5
  • Rom creation now uses esptool2, please have this in your path or set ESPTOOL2 env var to point to the binary

Release notes

  • SDK v1.4.0 & v1.5.0 support
  • Fix to ensure flash size is correctly set when flashing rBoot with a flash tool that does not set it for you
  • Performance fix when closing TCP connections
  • New upstream ArduinoJson
  • SmartConfig support added to Station class
  • Adafruit Neopixel driver and sample added
  • Formatting spiffs now done properly, to enable future features like enabling the magic option
  • getNetworkMask(), getNetworkGateway() & getNetworkBroadcast() added to AccessPoint class
  • getNetworkBroadcast() added to Station class
  • Last will and testament support for MQTT
  • Websockets support for CommandProcessing
  • Hardware PWM support (your results may vary!)
  • Fix return code for initialising SD card
  • Pass USER_CFLAGS to compiler (you can define this in your Makefile-user.mk to pass options to the build)
Sming - v1.4.0

Published by hreintke almost 9 years ago

Generic

This is a new Base Release of Sming Framework.
Since the 1.3.0 release, effort has been done to stabilize Core and extend integration within components.
Note: Spiffy/SPIFFS users should build and use the new Spiffy (run make spiffy in the Sming directory or build from the Sming eclipse project).

Added/Improved Features

  • Including Spiffy within Sming repository
  • Upgrade to SPIFFS upstream version v0.3.3
  • Improve Spiffy/SPIFFS integration
  • Improved rBoot integration options
  • Fix WDT usage
  • Fix DS1820 library
  • Initial integration of Sming/Travis CI

Features

  • ESP8266 functionality based on Espressif SDK 1.3.0
  • TCP Stack based on LWIP
  • HTTP, AJAX, Websockets support
  • MQTT, support based on libemqtt
  • OTA support based on rBoot (open source bootloader)
  • Filesystem support based on Spiffs and Spiffy (internal)
  • JSON support based in ArduinoJson

Libraries

A large number of (Arduino) libraries have been ported to the Sming environment.
Please check the Libraries and Examples folder for a full list.

Sming - v1.3.0

Published by hreintke about 9 years ago

Generic

This is a new Base Release of Sming Framework.
Since the 1.2.0 release, major effort has been done to stabilize Core and extend with major functionality.
Note: the libsming.a binary is not included in the source release any more, please build it yourself.

(New) Features

  • ESP8266 functionality based on Espressif SDK 1.3.0
  • TCP Stack based on LWIP
  • HTTP, AJAX, Websockets support
  • MQTT, support based on libemqtt
  • OTA support based on rBoot (open source bootloader)
  • Filesystem support based on Spiffs and Spiffy
  • JSON support based in ArduinoJson

Libraries

A large number of (Arduino) libraries have been ported to the Sming environment.
Please check the Libraries and Examples folder for a full list.

Sming - 1.2.0

Published by AutomationD over 9 years ago

New features

Fixes