- Call ResponseTransmittedHook after every response transmission attempt, instead of after every successful response transmission attempt.
- Improve documentation.
- Finalize README.md.
- Update keywords.txt.
- Generalize and improve JSON processing code.
- Prevent mesh passwords from containing " characters to avoid messing up the JSON processing.
- Improve documentation.
- Remove setMeshInstance method from RequestData class.
- Remove delay(50) and WiFi.disconnect() from setup() in the examples since those statements do not seem to have an effect any longer.
- Improve documentation.
- Ensure espnowDelay and floodingMeshDelay always performs maintenance.
- Rework MutexTracker to use shared_ptr.
- Change enums to enum class.
- Change typedef to using.
- Add HeapMonitor class.
- Make _messageIDs be a map instead of an unordered_map to reduce heap usage.
- Use the possibly broken wifi_country ESP8266 API to check for legal WiFi channels when setting WiFi channels.
- Make MessageData, RequestData and ResponseData contain a TimeTracker rather than inherit from TimeTracker.
- Add deprecated attribute to TransmissionResult.
- Remove superfluous elses.
- Reduce cyclomatic complexity.
- Change postfix ++ and -- to prefix.
- Generalize getEncryptedConnectionIterator method.
- Increase code NRVO compatibility.
- Change _connectionAttemptTimeoutMs type from int32_t to uint32_t.
- Add deprecated attribute to ESP8266WiFiMesh.
- Add some constness to TypeConversionFunctions.
- Move base36 arrays to PROGMEM in TypeConversionFunctions.cpp.
- Add deprecated atttribute to SHA1 and MD5 hashes.
- Remove _warningsEnabled in CryptoInterface since this has been replaced by the deprecated attribute.
- Prefix all TypeConversion getters with "get".
- Improve comments.
- Fix merge conflict.
- Replace const with constexpr where possible.
- Use default constructor instead of copy constructor for IPAddress variable initialization.
- Add MeshTypeConversionFunctions namespace around TypeConversionFunctions.
- Add MeshUtilityFunctions namespace around UtilityFunctions.
- Add ESP8266WIFIMESH_DISABLE_COMPATIBILITY preprocessor flag to retain compatibility with old code despite new namespaces.
- Add setLogEntryLifetimeMs and setBroadcastResponseTimeoutMs methods to EspnowMeshBackend.
- Move FloodingMesh constant definitions from header to .cpp file to reduce the risk of extra RAM consumption.
- Add deactivateAP method to FloodingMesh.
- Make deactivateAP static and add new non-static deactivateControlledAP method to MeshBackendBase.
- Add example of how to transfer null values using multiStrings to HelloEspnow.ino.
- Improve documentation.
- Improve comments.
- Add uint8ArrayToMultiString and bufferedUint8ArrayToMultiString TypeConversionFunctions to facilitate transfer of Strings containing null values.
- Add HKDF to CryptoInterface.
- Add ChaCha20 + Poly1305 AEAD to CryptoInterface.
- Add customizable nonce generator to CryptoInterface.
- Add ability to automatically encrypt/decrypt ESP-NOW messages via AEAD (ChaCha20 + Poly1305), independent from encrypted ESP-NOW connections.
- Greatly improve performance of incrementSessionKey, espnowGetMessageID, espnowSetMessageID and all non-template TypeConversionFunctions. The average performance increase is roughly a factor 5. Fun fact: Printing a MAC to a HEX String is now over twice as fast when using TypeConversionFunctions compared to using standard functionality like sprintf.
- Add uint64ToUint8Array and uint8ArrayToUint64 TypeConversionFunctions.
- Make it possible to use String values as ESP-NOW and FloodingMesh key seeds, instead of just requiring plain key arrays.
- Add customizable responseTransmittedHook to sendEspnowResponses.
- Add _responsesToSendMutex to make the new responseTransmittedHook safe to use.
- Remove verboseModePrinting from sendPeerRequestConfirmations method to reduce performance variations.
- Fix faulty messageID generation in FloodingMesh.
- Make assert checks more complete and easier to understand in the setMetadataDelimiter method of FloodingMesh.
- Rename EspnowEncryptionKey to EspnowEncryptedConnectionKey since there are now multiple encryption keys.
- Rename acceptsUnencryptedRequests to acceptsUnverifiedRequests, unencryptedMessageID to unsynchronizedMessageID, receivedEncryptedMessage to receivedEncryptedTransmission, since there are now multiple modes of encryption.
- Rename resultArrayLength to outputLength in CryptoInterface and remove its value restrictions in order to match the BearSSL functionality.
- Improve performance of FloodingMesh::encryptedBroadcast.
- Rename FloodingMesh methods maxUnencryptedMessageSize/maxEncryptedMessageSize to maxUnencryptedMessageLength/maxEncryptedMessageLength, so that String length naming is consistent within the library.
- Update examples to illustrate the new features.
- Improve comments.
- Add more HMAC and hash functions to CryptoInterface.
- Add MeshCryptoInterface as a holder of mesh specific crypto functionality.
- Rename broadcastMetadataDelimiter to metadataDelimiter in FloodingMesh since it is not just used for broadcasts, and to save some typing.
- Move cryptographic functions from JsonTranslator to CryptoInterface.
- Make AP activation separate from FloodingMesh::begin().
- Fix English bug.
- Improve comments.
- Update HelloEspnow.ino and HelloMesh.ino examples.
- Fix bug with TransmissionOutcomesUpdateHook not being called when the TCP/IP backend retained WiFi.status() == WL_CONNECTED.
- Add BroadcastTransmissionRedundancy and related functionality to reduce the transmission loss during broadcasts. Broadcast transmissions are now re-transmitted once per default. Broadcast throughput halved per default.
- Add getSenderAPMac method.
- Add FloodingMesh example in the HelloMesh.ino file.
- Improve JSON identifier names.
- Improve comments.
- Improve documentation.
* - Add assert in HelloMesh.ino for invalid transmission status.
- Make uint64ToString and stringToUint64 methods into stand-alone type conversion functions.
- Add getters and setters for requestHandler and responseHandler.
- Polish HelloMesh.ino code by adding networkIndex as networkFilter loop variable and switching networkFilter definition position.
- Add initial WiFi.disconnect() in HelloMesh.ino setup() function to ensure smooth WiFi operation.
- Add latestTransmissionSuccessful() convenience method.
- Change default WiFi mode to WIFI_STA and improve handling of WiFi mode (fixes issue #5071).
- Add checks to methods that change AP properties to avoid unnecessary AP restarts.
- Add getter for ESP8266WiFiMesh SSID and getters and setters for ESP8266WiFiMesh settings related to hidden SSID usage, max station connections allowed per AP and WiFi timeouts.
- Make waitForClientTransmission method use more accurate timekeeping.
- Improve type usage.
- Improve comments.
- Update README.md, keywords.txt and library.properties.
* Make getter and setter order consistent throughout code.
* - Fix active AP getting turned off when calling begin().
- Fix crash bug due to WiFiServer duplication when using the ESP8266WiFiMesh copy constructor with the AP controller as argument, under certain circumstances.
* - Move non performance-sensitive Strings to flash memory to save RAM.
- Add comments explaining F(), FPSTR() and PROGMEM.
- Fix README.md formatting.
* Remove the uint64ToString and stringToUint64 methods from the ESP8266WiFiMesh class since they are now stand-alone functions in the TypeConversionFunctions files.
* Change the minimum valid argument value of the setMaxAPStations method to 0, since this value is also supported by the ESP8266.
* Fix compiler warning.
* Make mesh network actually usable. Make mesh network use static IP during initial connection to speed up connection time. Add separate handlers for requests and responses. Add network password. Provide more detailed code example. Add optional verbose mode. Improve comments. Add readme file.
* Fix compiler warnings. Fix code style of HelloMesh.ino to avoid upsetting Travis.
* Remove stray spaces.
* Make mesh network WiFi password settable via the ESP8266WiFiMesh constructor. Make use of static IP optional by moving static IP initialization code to setStaticIP method. Increase scanning interval from one to two seconds in the HelloMesh.ino example to increase chances of successful connections. Update comments. Update README.rst.
* Increase specificity in the conditions of the waitForClientTransmission method (renamed from waitForClient) to avoid issues related to #4626 , #4728 and #4754 in the future.
* Improve most parts of the library to achieve better performance and greatly increase flexibility.
Changes:
* Make WiFi-connection related variables static to allow for the use of multiple ESP8266WiFiMesh instances on a single node (useful e.g. when communicating with several different mesh networks).
* Make it possible to choose AP port, which is helpful when using multiple ESP8266WiFiMesh AP:s on a single node.
* Add user-customizable network filter.
* Make activation of own AP optional for each mesh node.
* Add ways to change mesh network name and node id for existing ESP8266WiFiMesh instances.
* Add verboseModePrint method to clean up the code.
* Add reactivation of static IP after successful data transfers to speed up re-connection attempts.
* Add empty_IP constant which can be used to check if static IP is disabled for a ESP8266WiFiMesh instance.
* Remove the WiFiClient _client class variable in ESP8266WiFiMesh since there is no need to save _client in the class instance.
* Add transmission status as a return value from attemptTransmission.
* Pass calling ESP8266WiFiMesh instance pointer to callback functions to allow for greater range of actions in callbacks.
* Make transmission message a class variable to allow it to be stored in the class and accessed from callbacks.
* Add getters for mesh name and node id to ESP8266WiFiMesh.
* Add getter and setter for networkFilter to ESP8266WiFiMesh.
* Increase range of available node_id:s by changing the type to String and adding functions to convert between String and uint64_t using a customizable radix between 2 and 36.
* Make it possible to connect to several nodes during each attemptTransmission call.
* Add static connection_queue and latest_transmission_outcomes vectors to the ESP8266WiFiMesh class, a NetworkInfo class and a TransmissionResult class to aid in bookkeeping when connecting to several AP:s during one attemptTransmission call.
* Make wifi_channel and BSSID optional when connecting to an AP (though excluding them will slow down the connection process).
* Add optional scan and static ip optimizations available in Arduino core for ESP8266 version 2.4.2.
* Add functions to check lwIP version in order to enable WiFi optimizations only available with lwIP2.
* Add concluding_disconnect, initial_disconnect and no_scan options to the attemptTransmission method.
* Update documentation.
* Improve README.rst formatting.
* Further improve README.rst.
* Even further improve README.rst.
* Make source code comments Doxygen compatible. Improve README file and change its file format to .md.
* Add temporary compatibility layer to ensure backwards compatibility with the old mesh network library API until the next major core release (2.5.0).
* Polish documentation slightly.
* Add scan_all_wifi_channels option to attemptTransmission method.
* - Add getter and setter for the WiFi channel of a ESP8266WiFiMesh instance.
- Separate methods for changing mesh name and node id from AP control methods.
- Add methods getAPController and isAPController to better handle situations when multiple ESP8266WiFiMesh instances take turns to be in control of the AP.
- Create separate UtilityMethods.cpp file for utility methods.
- Improve code efficiency and robustness, e.g. by passing arguments by reference instead of by value for non-POD types and employing typedefs.
- Update README.md.
* Make the code more stylish.
* Update README.md with the new ESP8266WiFiMesh constructor documentation.
* Make attemptScan method in CompatibilityLayer use reference as argument.
* Make it possible to use const String as argument to attemptScan.
* - Make code use camelCase instead of snake_case.
- Improve documentation.
* Rename Uint64ToString to uint64ToString and StringToUint64 to stringToUint64, since they are methods.