Skip to content

Commit 92dfa7b

Browse files
chirag-silabsrosahay-silabs
authored andcommitted
[SL-ONLY] Make MQTT Subscribe/Publish QoS configurable via MqttClientConfig (#1190)
* Adding the option for the QoS level selection * Addressing the review comments
1 parent 7cf82dc commit 92dfa7b

3 files changed

Lines changed: 29 additions & 5 deletions

File tree

‎examples/thermostat/silabs/src/mqtt_example.cpp‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ using chip::ByteSpan;
3434
using chip::DeviceLayer::Silabs::MqttBroker;
3535
using chip::DeviceLayer::Silabs::MqttClient;
3636
using chip::DeviceLayer::Silabs::MqttClientConfig;
37-
using chip::DeviceLayer::Silabs::MqttQoS;
3837

3938
// Please fill in the details for your own MQTT broker.
4039
constexpr char kMqttBrokerIp[] = MQTT_BROKER_IP; // The IP address of your MQTT broker
@@ -88,6 +87,7 @@ sl_status_t mqtt_client_demo_start(void)
8887
return SL_STATUS_ALREADY_INITIALIZED;
8988
}
9089

90+
// Subscribe/Publish without an explicit QoS use MqttClientConfig::subQoS / pubQoS.
9191
const MqttClientConfig config = {
9292
.useTls = true,
9393
.clientId = kMqttClientId,
@@ -137,7 +137,7 @@ sl_status_t mqtt_client_demo_start(void)
137137
}
138138

139139
gOpDone = false;
140-
err = RunOperation(gMqttsClient.Subscribe(kMqttTopic, MqttQoS::QoS1, OnOperationDone));
140+
err = RunOperation(gMqttsClient.Subscribe(kMqttTopic, OnOperationDone));
141141
if (err != CHIP_NO_ERROR)
142142
{
143143
ChipLogError(DeviceLayer, "MQTT Subscribe failed: %" CHIP_ERROR_FORMAT, err.Format());
@@ -146,7 +146,7 @@ sl_status_t mqtt_client_demo_start(void)
146146

147147
const ByteSpan payload(reinterpret_cast<const uint8_t *>(kMqttPublishMessage), strlen(kMqttPublishMessage));
148148
gOpDone = false;
149-
err = RunOperation(gMqttsClient.Publish(kMqttTopic, payload, MqttQoS::QoS1, false, OnOperationDone));
149+
err = RunOperation(gMqttsClient.Publish(kMqttTopic, payload, false, OnOperationDone));
150150
if (err != CHIP_NO_ERROR)
151151
{
152152
ChipLogError(DeviceLayer, "MQTT Publish failed: %" CHIP_ERROR_FORMAT, err.Format());

‎src/platform/silabs/services/mqtt_client.cpp‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,11 @@ CHIP_ERROR MqttClient::Subscribe(const char * topic, MqttQoS qos, MqttOperationC
600600
return QueueOperation(Operation::Subscribe, callback, context);
601601
}
602602

603+
CHIP_ERROR MqttClient::Subscribe(const char * topic, MqttOperationCallback callback, void * context)
604+
{
605+
return Subscribe(topic, mConfig.subQoS, callback, context);
606+
}
607+
603608
CHIP_ERROR MqttClient::Unsubscribe(const char * topic, MqttOperationCallback callback, void * context)
604609
{
605610
VerifyOrReturnError(IsRunning(), CHIP_ERROR_INCORRECT_STATE);
@@ -626,6 +631,11 @@ CHIP_ERROR MqttClient::Publish(const char * topic, ByteSpan payload, MqttQoS qos
626631
return QueueOperation(Operation::Publish, callback, context);
627632
}
628633

634+
CHIP_ERROR MqttClient::Publish(const char * topic, ByteSpan payload, bool retained, MqttOperationCallback callback, void * context)
635+
{
636+
return Publish(topic, payload, mConfig.pubQoS, retained, callback, context);
637+
}
638+
629639
CHIP_ERROR MqttClient::Yield(uint32_t timeoutMs, MqttOperationCallback callback, void * context)
630640
{
631641
VerifyOrReturnError(IsRunning(), CHIP_ERROR_INCORRECT_STATE);

‎src/platform/silabs/services/mqtt_client.h‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,11 @@ struct MqttClientConfig
7878
bool willEnable = false;
7979
const char * willTopic = nullptr;
8080
const char * willMessage = nullptr;
81-
MqttQoS willQoS = MqttQoS::QoS1;
81+
// Defaults used when Subscribe / Publish omit an explicit QoS.
82+
MqttQoS willQoS = MqttQoS::QoS1; ///< Last Will QoS when willEnable is true.
8283
bool willRetained = false;
84+
MqttQoS pubQoS = MqttQoS::QoS1; ///< Default Publish QoS.
85+
MqttQoS subQoS = MqttQoS::QoS1; ///< Default Subscribe QoS.
8386

8487
/** PEM bytes for host mbedTLS CA chain. nullptr = skip CA install. */
8588
const uint8_t * tlsCaCert = nullptr;
@@ -158,6 +161,11 @@ class MqttClient : public MatterService
158161
*/
159162
CHIP_ERROR Subscribe(const char * topic, MqttQoS qos, MqttOperationCallback callback, void * context = nullptr);
160163

164+
/**
165+
* @brief Subscribe using @ref MqttClientConfig::subQoS from Init.
166+
*/
167+
CHIP_ERROR Subscribe(const char * topic, MqttOperationCallback callback, void * context = nullptr);
168+
161169
CHIP_ERROR Unsubscribe(const char * topic, MqttOperationCallback callback, void * context = nullptr);
162170

163171
/**
@@ -168,6 +176,12 @@ class MqttClient : public MatterService
168176
CHIP_ERROR Publish(const char * topic, ByteSpan payload, MqttQoS qos, bool retained, MqttOperationCallback callback,
169177
void * context = nullptr);
170178

179+
/**
180+
* @brief Publish using @ref MqttClientConfig::pubQoS from Init.
181+
*/
182+
CHIP_ERROR Publish(const char * topic, ByteSpan payload, bool retained, MqttOperationCallback callback,
183+
void * context = nullptr);
184+
171185
/**
172186
* @brief Queue a one-shot MQTTYield (optional; idle auto-yield covers keepalive/receive).
173187
*/
@@ -228,7 +242,7 @@ class MqttClient : public MatterService
228242

229243
const char * mPendingTopic = nullptr;
230244
ByteSpan mPendingPayload;
231-
MqttQoS mPendingQos = MqttQoS::QoS1;
245+
MqttQoS mPendingQos = MqttQoS::QoS0;
232246
bool mPendingRetained = false;
233247
uint32_t mPendingYieldTimeoutMs = 0;
234248

0 commit comments

Comments
 (0)