mirror of https://github.com/lumapu/ahoy.git
Browse Source
* patching MqTT library to prevent raise conditions while using semaphores * update ESP32 espressif platform to `0.6.9` * update ESPAsyncWebServer to `3.3.12`development03
lumapu
4 months ago
5 changed files with 111 additions and 16 deletions
@ -0,0 +1,88 @@ |
|||||
|
diff --git a/src/MqttClient.cpp b/src/MqttClient.cpp
|
||||
|
index dc21f74..d4b35c4 100644
|
||||
|
--- a/src/MqttClient.cpp
|
||||
|
+++ b/src/MqttClient.cpp
|
||||
|
@@ -1,7 +1,7 @@
|
||||
|
/* |
||||
|
Copyright (c) 2022 Bert Melis. All rights reserved. |
||||
|
|
||||
|
-This work is licensed under the terms of the MIT license.
|
||||
|
+This work is licensed under the terms of the MIT license.
|
||||
|
For a copy, see <https://opensource.org/licenses/MIT> or |
||||
|
the LICENSE file. |
||||
|
*/ |
||||
|
@@ -148,16 +148,19 @@ uint16_t MqttClient::publish(const char* topic, uint8_t qos, bool retain, const
|
||||
|
#endif |
||||
|
return 0; |
||||
|
} |
||||
|
- EMC_SEMAPHORE_TAKE();
|
||||
|
- uint16_t packetId = (qos > 0) ? _getNextPacketId() : 1;
|
||||
|
- if (!_addPacket(packetId, topic, payload, length, qos, retain)) {
|
||||
|
- emc_log_e("Could not create PUBLISH packet");
|
||||
|
+ uint16_t packetId = 0;
|
||||
|
+ if(pdTRUE == EMC_SEMAPHORE_TAKE()) {
|
||||
|
+ packetId = (qos > 0) ? _getNextPacketId() : 1;
|
||||
|
+ if (!_addPacket(packetId, topic, payload, length, qos, retain)) {
|
||||
|
+ emc_log_e("Could not create PUBLISH packet");
|
||||
|
+ EMC_SEMAPHORE_GIVE();
|
||||
|
+ _onError(packetId, Error::OUT_OF_MEMORY);
|
||||
|
+ if(pdTRUE == EMC_SEMAPHORE_TAKE())
|
||||
|
+ packetId = 0;
|
||||
|
+ }
|
||||
|
EMC_SEMAPHORE_GIVE(); |
||||
|
- _onError(packetId, Error::OUT_OF_MEMORY);
|
||||
|
- EMC_SEMAPHORE_TAKE();
|
||||
|
- packetId = 0;
|
||||
|
+ yield();
|
||||
|
} |
||||
|
- EMC_SEMAPHORE_GIVE();
|
||||
|
return packetId; |
||||
|
} |
||||
|
|
||||
|
@@ -174,16 +177,19 @@ uint16_t MqttClient::publish(const char* topic, uint8_t qos, bool retain, espMqt
|
||||
|
#endif |
||||
|
return 0; |
||||
|
} |
||||
|
- EMC_SEMAPHORE_TAKE();
|
||||
|
- uint16_t packetId = (qos > 0) ? _getNextPacketId() : 1;
|
||||
|
- if (!_addPacket(packetId, topic, callback, length, qos, retain)) {
|
||||
|
- emc_log_e("Could not create PUBLISH packet");
|
||||
|
+ uint16_t packetId = 0;
|
||||
|
+ if(pdTRUE == EMC_SEMAPHORE_TAKE()) {
|
||||
|
+ packetId = (qos > 0) ? _getNextPacketId() : 1;
|
||||
|
+ if (!_addPacket(packetId, topic, callback, length, qos, retain)) {
|
||||
|
+ emc_log_e("Could not create PUBLISH packet");
|
||||
|
+ EMC_SEMAPHORE_GIVE();
|
||||
|
+ _onError(packetId, Error::OUT_OF_MEMORY);
|
||||
|
+ if(pdTRUE == EMC_SEMAPHORE_TAKE())
|
||||
|
+ packetId = 0;
|
||||
|
+ }
|
||||
|
EMC_SEMAPHORE_GIVE(); |
||||
|
- _onError(packetId, Error::OUT_OF_MEMORY);
|
||||
|
- EMC_SEMAPHORE_TAKE();
|
||||
|
- packetId = 0;
|
||||
|
+ yield();
|
||||
|
} |
||||
|
- EMC_SEMAPHORE_GIVE();
|
||||
|
return packetId; |
||||
|
} |
||||
|
|
||||
|
@@ -237,11 +243,13 @@ void MqttClient::loop() {
|
||||
|
case State::connectingMqtt: |
||||
|
#if EMC_WAIT_FOR_CONNACK |
||||
|
if (_transport->connected()) { |
||||
|
- EMC_SEMAPHORE_TAKE();
|
||||
|
- _sendPacket();
|
||||
|
- _checkIncoming();
|
||||
|
- _checkPing();
|
||||
|
- EMC_SEMAPHORE_GIVE();
|
||||
|
+ if(pdTRUE == EMC_SEMAPHORE_TAKE()) {
|
||||
|
+ _sendPacket();
|
||||
|
+ _checkIncoming();
|
||||
|
+ _checkPing();
|
||||
|
+ EMC_SEMAPHORE_GIVE();
|
||||
|
+ yield();
|
||||
|
+ }
|
||||
|
} else { |
||||
|
_setState(State::disconnectingTcp1); |
||||
|
_disconnectReason = DisconnectReason::TCP_DISCONNECTED; |
Loading…
Reference in new issue