Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
mbed-mqtt-master/paho_mqtt-sn_embedded_c/MQTTSNGateway/GatewayTester/samples/mainTest.cpp@0:ba7e439238ab, 2022-06-20 (annotated)
- Committer:
- pavleradojkovic
- Date:
- Mon Jun 20 16:24:43 2022 +0000
- Revision:
- 0:ba7e439238ab
Inital commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pavleradojkovic | 0:ba7e439238ab | 1 | /**************************************************************************** |
pavleradojkovic | 0:ba7e439238ab | 2 | * Copyright (c) 2016, Tomoaki Yamaguchi |
pavleradojkovic | 0:ba7e439238ab | 3 | * |
pavleradojkovic | 0:ba7e439238ab | 4 | * All rights reserved. This program and the accompanying materials |
pavleradojkovic | 0:ba7e439238ab | 5 | * are made available under the terms of the Eclipse Public License v1.0 |
pavleradojkovic | 0:ba7e439238ab | 6 | * and Eclipse Distribution License v1.0 which accompany this distribution. |
pavleradojkovic | 0:ba7e439238ab | 7 | * |
pavleradojkovic | 0:ba7e439238ab | 8 | * The Eclipse Public License is available at |
pavleradojkovic | 0:ba7e439238ab | 9 | * http://www.eclipse.org/legal/epl-v10.html |
pavleradojkovic | 0:ba7e439238ab | 10 | * and the Eclipse Distribution License is available at |
pavleradojkovic | 0:ba7e439238ab | 11 | * http://www.eclipse.org/org/documents/edl-v10.php. |
pavleradojkovic | 0:ba7e439238ab | 12 | * |
pavleradojkovic | 0:ba7e439238ab | 13 | *--------------------------------------------------------------------------- |
pavleradojkovic | 0:ba7e439238ab | 14 | * |
pavleradojkovic | 0:ba7e439238ab | 15 | * MQTT-SN GATEWAY TEST CLIENT |
pavleradojkovic | 0:ba7e439238ab | 16 | * |
pavleradojkovic | 0:ba7e439238ab | 17 | * Supported functions. |
pavleradojkovic | 0:ba7e439238ab | 18 | * |
pavleradojkovic | 0:ba7e439238ab | 19 | * void PUBLISH ( const char* topicName, uint8_t* payload, uint16_t len, uint8_t qos, bool retain = false ); |
pavleradojkovic | 0:ba7e439238ab | 20 | * |
pavleradojkovic | 0:ba7e439238ab | 21 | * void PUBLISH ( uint16_t topicId, uint8_t* payload, uint16_t len, uint8_t qos, bool retain = false ); |
pavleradojkovic | 0:ba7e439238ab | 22 | * |
pavleradojkovic | 0:ba7e439238ab | 23 | * void SUBSCRIBE ( const char* topicName, TopicCallback onPublish, uint8_t qos ); |
pavleradojkovic | 0:ba7e439238ab | 24 | * |
pavleradojkovic | 0:ba7e439238ab | 25 | * void SUBSCRIBE ( uint16_t topicId, TopicCallback onPublish, uint8_t qos ); |
pavleradojkovic | 0:ba7e439238ab | 26 | * |
pavleradojkovic | 0:ba7e439238ab | 27 | * void UNSUBSCRIBE ( const char* topicName ); |
pavleradojkovic | 0:ba7e439238ab | 28 | * |
pavleradojkovic | 0:ba7e439238ab | 29 | * void UNSUBSCRIBE ( uint16_t topicId ); |
pavleradojkovic | 0:ba7e439238ab | 30 | * |
pavleradojkovic | 0:ba7e439238ab | 31 | * void DISCONNECT ( uint16_t sleepInSecs ); |
pavleradojkovic | 0:ba7e439238ab | 32 | * |
pavleradojkovic | 0:ba7e439238ab | 33 | * void CONNECT ( void ); |
pavleradojkovic | 0:ba7e439238ab | 34 | * |
pavleradojkovic | 0:ba7e439238ab | 35 | * void DISPLAY( format, .....); <== instead of printf() |
pavleradojkovic | 0:ba7e439238ab | 36 | * |
pavleradojkovic | 0:ba7e439238ab | 37 | * |
pavleradojkovic | 0:ba7e439238ab | 38 | * Contributors: |
pavleradojkovic | 0:ba7e439238ab | 39 | * Tomoaki Yamaguchi - initial API and implementation |
pavleradojkovic | 0:ba7e439238ab | 40 | ***************************************************************************/ |
pavleradojkovic | 0:ba7e439238ab | 41 | |
pavleradojkovic | 0:ba7e439238ab | 42 | #include "LMqttsnClientApp.h" |
pavleradojkovic | 0:ba7e439238ab | 43 | #include "LMqttsnClient.h" |
pavleradojkovic | 0:ba7e439238ab | 44 | #include "LScreen.h" |
pavleradojkovic | 0:ba7e439238ab | 45 | |
pavleradojkovic | 0:ba7e439238ab | 46 | using namespace std; |
pavleradojkovic | 0:ba7e439238ab | 47 | using namespace linuxAsyncClient; |
pavleradojkovic | 0:ba7e439238ab | 48 | extern LMqttsnClient* theClient; |
pavleradojkovic | 0:ba7e439238ab | 49 | extern LScreen* theScreen; |
pavleradojkovic | 0:ba7e439238ab | 50 | |
pavleradojkovic | 0:ba7e439238ab | 51 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 52 | * UDP Configuration (theNetcon) |
pavleradojkovic | 0:ba7e439238ab | 53 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 54 | UDPCONF = { |
pavleradojkovic | 0:ba7e439238ab | 55 | "GatewayTestClient", // ClientId |
pavleradojkovic | 0:ba7e439238ab | 56 | {225,1,1,1}, // Multicast group IP |
pavleradojkovic | 0:ba7e439238ab | 57 | 1883, // Multicast group Port |
pavleradojkovic | 0:ba7e439238ab | 58 | 20020, // Local PortNo |
pavleradojkovic | 0:ba7e439238ab | 59 | }; |
pavleradojkovic | 0:ba7e439238ab | 60 | |
pavleradojkovic | 0:ba7e439238ab | 61 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 62 | * Client Configuration (theMqcon) |
pavleradojkovic | 0:ba7e439238ab | 63 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 64 | MQTTSNCONF = { |
pavleradojkovic | 0:ba7e439238ab | 65 | 60, //KeepAlive [seconds] |
pavleradojkovic | 0:ba7e439238ab | 66 | true, //Clean session |
pavleradojkovic | 0:ba7e439238ab | 67 | 300, //Sleep duration [seconds] |
pavleradojkovic | 0:ba7e439238ab | 68 | "", //WillTopic |
pavleradojkovic | 0:ba7e439238ab | 69 | "", //WillMessage |
pavleradojkovic | 0:ba7e439238ab | 70 | 0, //WillQos |
pavleradojkovic | 0:ba7e439238ab | 71 | false //WillRetain |
pavleradojkovic | 0:ba7e439238ab | 72 | }; |
pavleradojkovic | 0:ba7e439238ab | 73 | |
pavleradojkovic | 0:ba7e439238ab | 74 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 75 | * Define Topics |
pavleradojkovic | 0:ba7e439238ab | 76 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 77 | const char* topic1 = "ty4tw/topic1"; |
pavleradojkovic | 0:ba7e439238ab | 78 | const char* topic2 = "ty4tw/topic2"; |
pavleradojkovic | 0:ba7e439238ab | 79 | const char* topic3 = "ty4tw/topic3"; |
pavleradojkovic | 0:ba7e439238ab | 80 | const char* topic4 = "ty4tw/topic4"; |
pavleradojkovic | 0:ba7e439238ab | 81 | const char* topic51 = "ty4tw/topic5/1"; |
pavleradojkovic | 0:ba7e439238ab | 82 | const char* topic52 = "ty4tw/topic5/2"; |
pavleradojkovic | 0:ba7e439238ab | 83 | const char* topic53 = "ty4tw/topic5/3"; |
pavleradojkovic | 0:ba7e439238ab | 84 | const char* topic50 = "ty4tw/topic5/+"; |
pavleradojkovic | 0:ba7e439238ab | 85 | |
pavleradojkovic | 0:ba7e439238ab | 86 | |
pavleradojkovic | 0:ba7e439238ab | 87 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 88 | * Callback routines for Subscribed Topics |
pavleradojkovic | 0:ba7e439238ab | 89 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 90 | int on_Topic01(uint8_t* pload, uint16_t ploadlen) |
pavleradojkovic | 0:ba7e439238ab | 91 | { |
pavleradojkovic | 0:ba7e439238ab | 92 | DISPLAY("\n\nTopic1 recv.\n"); |
pavleradojkovic | 0:ba7e439238ab | 93 | char c = pload[ploadlen-1]; |
pavleradojkovic | 0:ba7e439238ab | 94 | pload[ploadlen-1]= 0; // set null terminator |
pavleradojkovic | 0:ba7e439238ab | 95 | DISPLAY("Payload -->%s%c<--\n\n",pload, c); |
pavleradojkovic | 0:ba7e439238ab | 96 | return 0; |
pavleradojkovic | 0:ba7e439238ab | 97 | } |
pavleradojkovic | 0:ba7e439238ab | 98 | |
pavleradojkovic | 0:ba7e439238ab | 99 | int on_Topic02(uint8_t* pload, uint16_t ploadlen) |
pavleradojkovic | 0:ba7e439238ab | 100 | { |
pavleradojkovic | 0:ba7e439238ab | 101 | DISPLAY("\n\nTopic2 recv.\n"); |
pavleradojkovic | 0:ba7e439238ab | 102 | pload[ploadlen-1]= 0; // set null terminator |
pavleradojkovic | 0:ba7e439238ab | 103 | DISPLAY("Payload -->%s <--\n\n",pload); |
pavleradojkovic | 0:ba7e439238ab | 104 | return 0; |
pavleradojkovic | 0:ba7e439238ab | 105 | } |
pavleradojkovic | 0:ba7e439238ab | 106 | |
pavleradojkovic | 0:ba7e439238ab | 107 | int on_Topic03(uint8_t* pload, uint16_t ploadlen) |
pavleradojkovic | 0:ba7e439238ab | 108 | { |
pavleradojkovic | 0:ba7e439238ab | 109 | DISPLAY("\n\nNew callback recv Topic3\n"); |
pavleradojkovic | 0:ba7e439238ab | 110 | pload[ploadlen-1]= 0; // set null terminator |
pavleradojkovic | 0:ba7e439238ab | 111 | DISPLAY("Payload -->%s <--\n\n",pload); |
pavleradojkovic | 0:ba7e439238ab | 112 | return 0; |
pavleradojkovic | 0:ba7e439238ab | 113 | } |
pavleradojkovic | 0:ba7e439238ab | 114 | |
pavleradojkovic | 0:ba7e439238ab | 115 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 116 | * A Link list of Callback routines and Topics |
pavleradojkovic | 0:ba7e439238ab | 117 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 118 | |
pavleradojkovic | 0:ba7e439238ab | 119 | SUBSCRIBE_LIST = {// e.g. SUB(TopicType, topicName, TopicId, callback, QoSx), |
pavleradojkovic | 0:ba7e439238ab | 120 | SUB(MQTTSN_TOPIC_TYPE_NORMAL, topic1, 0, on_Topic01, QoS1), |
pavleradojkovic | 0:ba7e439238ab | 121 | SUB(MQTTSN_TOPIC_TYPE_NORMAL, topic2, 0, on_Topic02, QoS1), |
pavleradojkovic | 0:ba7e439238ab | 122 | END_OF_SUBSCRIBE_LIST |
pavleradojkovic | 0:ba7e439238ab | 123 | }; |
pavleradojkovic | 0:ba7e439238ab | 124 | |
pavleradojkovic | 0:ba7e439238ab | 125 | |
pavleradojkovic | 0:ba7e439238ab | 126 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 127 | * Test functions |
pavleradojkovic | 0:ba7e439238ab | 128 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 129 | void subscribePredefTopic1(void) |
pavleradojkovic | 0:ba7e439238ab | 130 | { |
pavleradojkovic | 0:ba7e439238ab | 131 | SUBSCRIBE(1, on_Topic03, QoS1); |
pavleradojkovic | 0:ba7e439238ab | 132 | } |
pavleradojkovic | 0:ba7e439238ab | 133 | |
pavleradojkovic | 0:ba7e439238ab | 134 | void publishTopic1(void) |
pavleradojkovic | 0:ba7e439238ab | 135 | { |
pavleradojkovic | 0:ba7e439238ab | 136 | char payload[300]; |
pavleradojkovic | 0:ba7e439238ab | 137 | sprintf(payload, "publish \"ty4tw/Topic1\" \n"); |
pavleradojkovic | 0:ba7e439238ab | 138 | PUBLISH(topic1,(uint8_t*)payload, strlen(payload), QoS0); |
pavleradojkovic | 0:ba7e439238ab | 139 | } |
pavleradojkovic | 0:ba7e439238ab | 140 | |
pavleradojkovic | 0:ba7e439238ab | 141 | void subscribeTopic2(void) |
pavleradojkovic | 0:ba7e439238ab | 142 | { |
pavleradojkovic | 0:ba7e439238ab | 143 | SUBSCRIBE(10, on_Topic02, QoS1); |
pavleradojkovic | 0:ba7e439238ab | 144 | } |
pavleradojkovic | 0:ba7e439238ab | 145 | |
pavleradojkovic | 0:ba7e439238ab | 146 | void publishTopic2(void) |
pavleradojkovic | 0:ba7e439238ab | 147 | { |
pavleradojkovic | 0:ba7e439238ab | 148 | char payload[300]; |
pavleradojkovic | 0:ba7e439238ab | 149 | sprintf(payload, "publish \"ty4tw/topic2\" \n"); |
pavleradojkovic | 0:ba7e439238ab | 150 | PUBLISH(topic2,(uint8_t*)payload, strlen(payload), QoS1); |
pavleradojkovic | 0:ba7e439238ab | 151 | } |
pavleradojkovic | 0:ba7e439238ab | 152 | |
pavleradojkovic | 0:ba7e439238ab | 153 | |
pavleradojkovic | 0:ba7e439238ab | 154 | |
pavleradojkovic | 0:ba7e439238ab | 155 | void unsubscribe(void) |
pavleradojkovic | 0:ba7e439238ab | 156 | { |
pavleradojkovic | 0:ba7e439238ab | 157 | UNSUBSCRIBE(topic2); |
pavleradojkovic | 0:ba7e439238ab | 158 | } |
pavleradojkovic | 0:ba7e439238ab | 159 | |
pavleradojkovic | 0:ba7e439238ab | 160 | void subscribechangeCallback(void) |
pavleradojkovic | 0:ba7e439238ab | 161 | { |
pavleradojkovic | 0:ba7e439238ab | 162 | SUBSCRIBE(topic2, on_Topic02, QoS1); |
pavleradojkovic | 0:ba7e439238ab | 163 | } |
pavleradojkovic | 0:ba7e439238ab | 164 | |
pavleradojkovic | 0:ba7e439238ab | 165 | void test3(void) |
pavleradojkovic | 0:ba7e439238ab | 166 | { |
pavleradojkovic | 0:ba7e439238ab | 167 | char payload[300]; |
pavleradojkovic | 0:ba7e439238ab | 168 | sprintf(payload, "TEST3 "); |
pavleradojkovic | 0:ba7e439238ab | 169 | uint8_t qos = 0; |
pavleradojkovic | 0:ba7e439238ab | 170 | PUBLISH(topic2,(uint8_t*)payload, strlen(payload), qos); |
pavleradojkovic | 0:ba7e439238ab | 171 | } |
pavleradojkovic | 0:ba7e439238ab | 172 | |
pavleradojkovic | 0:ba7e439238ab | 173 | void disconnect(void) |
pavleradojkovic | 0:ba7e439238ab | 174 | { |
pavleradojkovic | 0:ba7e439238ab | 175 | DISCONNECT(0); |
pavleradojkovic | 0:ba7e439238ab | 176 | } |
pavleradojkovic | 0:ba7e439238ab | 177 | |
pavleradojkovic | 0:ba7e439238ab | 178 | void asleep(void) |
pavleradojkovic | 0:ba7e439238ab | 179 | { |
pavleradojkovic | 0:ba7e439238ab | 180 | DISCONNECT(theMqcon.sleepDuration); |
pavleradojkovic | 0:ba7e439238ab | 181 | } |
pavleradojkovic | 0:ba7e439238ab | 182 | |
pavleradojkovic | 0:ba7e439238ab | 183 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 184 | * A List of Test functions is valid in case of |
pavleradojkovic | 0:ba7e439238ab | 185 | * line 23 of LMqttsnClientApp.h is commented out. |
pavleradojkovic | 0:ba7e439238ab | 186 | * //#define CLIENT_MODE |
pavleradojkovic | 0:ba7e439238ab | 187 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 188 | |
pavleradojkovic | 0:ba7e439238ab | 189 | TEST_LIST = {// e.g. TEST( Label, Test), |
pavleradojkovic | 0:ba7e439238ab | 190 | TEST("Step0:Subscribe predef topic1", subscribePredefTopic1), |
pavleradojkovic | 0:ba7e439238ab | 191 | TEST("Step1:Publish topic1", publishTopic1), |
pavleradojkovic | 0:ba7e439238ab | 192 | TEST("Step2:Publish topic2", publishTopic2), |
pavleradojkovic | 0:ba7e439238ab | 193 | TEST("Step3:Subscribe topic2", subscribeTopic2), |
pavleradojkovic | 0:ba7e439238ab | 194 | TEST("Step4:Publish topic2", publishTopic2), |
pavleradojkovic | 0:ba7e439238ab | 195 | TEST("Step5:Unsubscribe topic2", unsubscribe), |
pavleradojkovic | 0:ba7e439238ab | 196 | TEST("Step6:Publish topic2", publishTopic2), |
pavleradojkovic | 0:ba7e439238ab | 197 | TEST("Step7:subscribe again", subscribechangeCallback), |
pavleradojkovic | 0:ba7e439238ab | 198 | TEST("Step8:Publish topic2", publishTopic2), |
pavleradojkovic | 0:ba7e439238ab | 199 | TEST("Step9:Sleep ", asleep), |
pavleradojkovic | 0:ba7e439238ab | 200 | TEST("Step10:Publish topic1", publishTopic1), |
pavleradojkovic | 0:ba7e439238ab | 201 | TEST("Step11:Disconnect", disconnect), |
pavleradojkovic | 0:ba7e439238ab | 202 | END_OF_TEST_LIST |
pavleradojkovic | 0:ba7e439238ab | 203 | }; |
pavleradojkovic | 0:ba7e439238ab | 204 | |
pavleradojkovic | 0:ba7e439238ab | 205 | |
pavleradojkovic | 0:ba7e439238ab | 206 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 207 | * List of tasks is valid in case of line23 of |
pavleradojkovic | 0:ba7e439238ab | 208 | * LMqttsnClientApp.h is uncommented. |
pavleradojkovic | 0:ba7e439238ab | 209 | * #define CLIENT_MODE |
pavleradojkovic | 0:ba7e439238ab | 210 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 211 | TASK_LIST = {// e.g. TASK( task, executing duration in second), |
pavleradojkovic | 0:ba7e439238ab | 212 | TASK(publishTopic1, 4), // publishTopic1() is executed every 4 seconds |
pavleradojkovic | 0:ba7e439238ab | 213 | TASK(publishTopic2, 7), // publishTopic2() is executed every 7 seconds |
pavleradojkovic | 0:ba7e439238ab | 214 | END_OF_TASK_LIST |
pavleradojkovic | 0:ba7e439238ab | 215 | }; |
pavleradojkovic | 0:ba7e439238ab | 216 | |
pavleradojkovic | 0:ba7e439238ab | 217 | |
pavleradojkovic | 0:ba7e439238ab | 218 | /*------------------------------------------------------ |
pavleradojkovic | 0:ba7e439238ab | 219 | * Initialize function |
pavleradojkovic | 0:ba7e439238ab | 220 | *------------------------------------------------------*/ |
pavleradojkovic | 0:ba7e439238ab | 221 | void setup(void) |
pavleradojkovic | 0:ba7e439238ab | 222 | { |
pavleradojkovic | 0:ba7e439238ab | 223 | SetForwarderMode(false); |
pavleradojkovic | 0:ba7e439238ab | 224 | } |
pavleradojkovic | 0:ba7e439238ab | 225 | |
pavleradojkovic | 0:ba7e439238ab | 226 | |
pavleradojkovic | 0:ba7e439238ab | 227 | /***************** END OF PROGRAM ********************/ |