Pavle Radojkovic / mbed-mqtt
Committer:
pavleradojkovic
Date:
Mon Jun 20 16:24:43 2022 +0000
Revision:
0:ba7e439238ab
Inital commit

Who changed what in which revision?

UserRevisionLine numberNew 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 ********************/