Releases: SmingHub/Sming
v3.7.0 - codename "M"
This is a major release containing new features, fixes and breaking changes. This is a very important new release as it marks the start of polishing the existing components, improving their quality and paving the way for version 4.
This release is codenamed "M" which might stand for Mini, Maxi or @mikee47 - our new top contributor who made a lot of changes in this release that led to substantial list of improvements and more free memory heap for your applications based on Sming Framework.
This release is worth trying! And the next one is promising to be even better :).
Without further ado here are some of the highlights ( full list is here ):
New features
- Allowed the use of multiple DS18S20 sensors #1440.
- Experimental support for SDK 3.0 for rBoot apps. #1470
- Added TM1637 7-segment led display library #1512
Improvements
- Optimised HashMap to use pass-by-reference where possible. #1455
- Improved uri escaping / unescaping #1457
- More free heap due to moving constant data in flash #1438 #1459
- Improvements to the String class and added support for binary strings #1437. Revised SplitString #1508
- HttpHeaders #1461 #1463. HttpRequest improvements and HttpParams as a separate module #1498
- Rewritten flashmem driver to cope with misaligned RAM buffers #1490
- Upgrades to the serial port driver #1493
- Various improvements to NtpClient class #1482
- Updated AxTLS with fixes related to CVE-2018-16150 and CVE-2018-16149 #1506
- Streaming support for flash data. Changes to FileStream class #1510
- Fixed Basic_WebSkeletonApp body parsing #1516
Refactoring
- Stream classes #1488, #1496
- Refactored TemplateFileStream class using TemplateStream #1500
- Refactored websocket client and server #1514
- Refactored http connections for better code reuse #1515
Deprecations
- As per our poll results: Deprecate non-rBoot apps #1513
- Hardware_Timer is deprecated. You should use HardwareTimer instead
- HttpResponse::hasHeader() - this method is deprecated since quite some time and will be removed in the next version.
Breaking Changes
- SystemClock::now() returns
time_t
instead ofDateTime
.
If you use Websocket functionality make sure to read the notes below.
-
Renamed Websocket related types, classes and methods. We used to have
WebSocket
andWebsocket
. From now on onlyWebsocket
will be used. ExampleWebsocketConnection::getActiveWebSockets
is nowWebsocketConnection::getActiveWebsockets
. -
WebsocketConnection
Renamed the method making thebinding
to a http server socket to be calledbind
. -
WebsocketClient
All methods starting withsetWebSocket
are shortened toset
. Example:setWebSocketMessageHandler
is renamed tosetMessageHandler
.
All PRs merged in this release can be seen from here
For a complete list of changes run the following command:
git log 3.6.1.2..3.7.0
Thanks to everyone who helped us make this release happen and especially to @mikee47 for working so hard on multiple improvements and bug fixes!
v3.6.1
This is a minor release containing fixes, new features and coding style rules.
Coding Style Rules
- This is the first version in which we started forcing our coding style rules. The coding style rules are applied to the
SmingCore
andsamples
directories and their sub-directories. The coding style rules useclang-format
to automate the process. You should format your code changes before submitting a PR. This can be done, after installing theclang-format
application, with the command
cd $SMING_HOME
make cs
More information about the coding style and ways to integrate automatic fixes in your Eclipse IDE can be found in our Wiki page.
Features
- Added support for the DFPlayerMini ( #1408 )
Bug fixes and small improvements
- Fix to the SmtpClient default port allocation (#1409).
- Fix to the MqttClient and the allowed schemas in the connection URL (#1410).
- Removed unused or deprecated code. DrivePWM is no longer in the code. Use HardwarePWM instead. (#1423).
Automation
- Added automatic check for coding style rules
- Added automatic generation of chocolatey packages on new release (#1406).
All PRs merged in this release can be seen from here
For a complete list of changes run the following command:
git log 3.6.0..3.6.1.2
Thanks to everyone who helped us make this release happen.
v3.6.0
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 toMultipartStream
*SmingCore/Network/Http/Stream/HttpMultipartStream.h
is moved toSmingCore/Data/Stream/MultipartStream.h
-
HttpChunkedStream.h
*HttpChunkedStream
is renamed toChunkedStream
*SmingCore/Network/Http/Stream/HttpChunkedStream
is moved toSmingCore/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.
- CircularBuffer.h is moved to
-
The deprecated
TcpConnection::setSslFingerprint
is removed. UseTcpClient::pinCertificate
instead. -
TcpConnection::setSslClientKeyCert
is deprecated. UseTcpConnection::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
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.
v3.5.2
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.
v3.5.1
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.
v3.5.0
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!
v3.4.0
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.
v3.3.0
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.
Release Candidate 2 for version 3.3.0.
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
Release Candidate 1 for version 3.3.0.
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.