mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
merge mqttClinet PR 115 from BertMelis
This commit is contained in:
@@ -14,12 +14,8 @@ using espMqttClientTypes::DisconnectReason;
|
|||||||
using espMqttClientTypes::Error;
|
using espMqttClientTypes::Error;
|
||||||
|
|
||||||
MqttClient::MqttClient(espMqttClientTypes::UseInternalTask useInternalTask, uint8_t priority, uint8_t core)
|
MqttClient::MqttClient(espMqttClientTypes::UseInternalTask useInternalTask, uint8_t priority, uint8_t core)
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
|
||||||
: _useInternalTask(useInternalTask)
|
: _useInternalTask(useInternalTask)
|
||||||
, _transport(nullptr)
|
, _transport(nullptr)
|
||||||
#else
|
|
||||||
: _transport(nullptr)
|
|
||||||
#endif
|
|
||||||
, _onConnectCallback(nullptr)
|
, _onConnectCallback(nullptr)
|
||||||
, _onDisconnectCallback(nullptr)
|
, _onDisconnectCallback(nullptr)
|
||||||
, _onSubscribeCallback(nullptr)
|
, _onSubscribeCallback(nullptr)
|
||||||
@@ -153,8 +149,8 @@ uint16_t MqttClient::publish(const char * topic, uint8_t qos, bool retain, const
|
|||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
uint16_t packetId = (qos > 0) ? _getNextPacketId() : 1;
|
|
||||||
EMC_SEMAPHORE_TAKE();
|
EMC_SEMAPHORE_TAKE();
|
||||||
|
uint16_t packetId = (qos > 0) ? _getNextPacketId() : 1;
|
||||||
if (!_addPacket(packetId, topic, payload, length, qos, retain)) {
|
if (!_addPacket(packetId, topic, payload, length, qos, retain)) {
|
||||||
emc_log_e("Could not create PUBLISH packet");
|
emc_log_e("Could not create PUBLISH packet");
|
||||||
_onError(packetId, Error::OUT_OF_MEMORY);
|
_onError(packetId, Error::OUT_OF_MEMORY);
|
||||||
@@ -177,8 +173,8 @@ uint16_t MqttClient::publish(const char * topic, uint8_t qos, bool retain, espMq
|
|||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
uint16_t packetId = (qos > 0) ? _getNextPacketId() : 1;
|
|
||||||
EMC_SEMAPHORE_TAKE();
|
EMC_SEMAPHORE_TAKE();
|
||||||
|
uint16_t packetId = (qos > 0) ? _getNextPacketId() : 1;
|
||||||
if (!_addPacket(packetId, topic, callback, length, qos, retain)) {
|
if (!_addPacket(packetId, topic, callback, length, qos, retain)) {
|
||||||
emc_log_e("Could not create PUBLISH packet");
|
emc_log_e("Could not create PUBLISH packet");
|
||||||
_onError(packetId, Error::OUT_OF_MEMORY);
|
_onError(packetId, Error::OUT_OF_MEMORY);
|
||||||
@@ -320,12 +316,9 @@ void MqttClient::_loop(MqttClient * c) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint16_t MqttClient::_getNextPacketId() {
|
uint16_t MqttClient::_getNextPacketId() {
|
||||||
uint16_t packetId = 0;
|
++_packetId;
|
||||||
EMC_SEMAPHORE_TAKE();
|
if (_packetId == 0) ++_packetId;
|
||||||
// cppcheck-suppress knownConditionTrueFalse
|
return _packetId;
|
||||||
packetId = (++_packetId == 0) ? ++_packetId : _packetId;
|
|
||||||
EMC_SEMAPHORE_GIVE();
|
|
||||||
return packetId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttClient::_checkOutbox() {
|
void MqttClient::_checkOutbox() {
|
||||||
@@ -340,10 +333,9 @@ int MqttClient::_sendPacket() {
|
|||||||
EMC_SEMAPHORE_TAKE();
|
EMC_SEMAPHORE_TAKE();
|
||||||
OutgoingPacket * packet = _outbox.getCurrent();
|
OutgoingPacket * packet = _outbox.getCurrent();
|
||||||
|
|
||||||
size_t wantToWrite = 0;
|
|
||||||
size_t written = 0;
|
size_t written = 0;
|
||||||
if (packet && (wantToWrite == written)) {
|
if (packet) {
|
||||||
wantToWrite = packet->packet.available(_bytesSent);
|
size_t wantToWrite = packet->packet.available(_bytesSent);
|
||||||
if (wantToWrite == 0) {
|
if (wantToWrite == 0) {
|
||||||
EMC_SEMAPHORE_GIVE();
|
EMC_SEMAPHORE_GIVE();
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -40,8 +40,7 @@ bool ClientPosix::connect(IPAddress ip, uint16_t port) {
|
|||||||
_host.sin_addr.s_addr = htonl(uint32_t(ip));
|
_host.sin_addr.s_addr = htonl(uint32_t(ip));
|
||||||
_host.sin_port = htons(port); // modified by proddy for EMS-ESP compiling standalone
|
_host.sin_port = htons(port); // modified by proddy for EMS-ESP compiling standalone
|
||||||
|
|
||||||
int ret = ::connect(_sockfd, (struct sockaddr *)&_host, sizeof(_host));
|
int ret = ::connect(_sockfd, reinterpret_cast<sockaddr*>(&_host), sizeof(_host));
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
emc_log_e("Error connecting: %d - (%d) %s", ret, errno, strerror(errno));
|
emc_log_e("Error connecting: %d - (%d) %s", ret, errno, strerror(errno));
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class ClientPosix : public Transport {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
int _sockfd;
|
int _sockfd;
|
||||||
struct sockaddr_in _host;
|
sockaddr_in _host;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace espMqttClientInternals
|
} // namespace espMqttClientInternals
|
||||||
|
|||||||
Reference in New Issue
Block a user