WIP. send a large constant string twice a second, in order to test out the transport with something indicative of our required load.

Dependencies:   FXOS8700CQ NTPClient azure_umqtt_c iothub_mqtt_transport mbed-rtos mbed wolfSSL Socket lwip-eth lwip-sys lwip

Fork of FXOS8700CQ_To_Azure_IoT by Mark Radbourne

Committer:
julianhigginson
Date:
Thu Jan 05 23:40:24 2017 +0000
Revision:
7:0d1a0fe537dc
Parent:
6:66576aa3d4e3
modified dummy message for minimal data transport

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markrad 0:6c46c366f500 1 // Copyright (c) Microsoft. All rights reserved.
markrad 0:6c46c366f500 2 // Licensed under the MIT license. See LICENSE file at https://github.com/Azure/azure-iot-sdks/blob/master/LICENSE for full license information.
markrad 0:6c46c366f500 3
markrad 0:6c46c366f500 4 /* -------------------------------------------------------------------------- *\
markrad 0:6c46c366f500 5
markrad 0:6c46c366f500 6 Simple progam to demonstrate reading the FRDM-K64F FXOS8700CQ
markrad 0:6c46c366f500 7 accelerometer, convert the data to JSON and send to an Azure IoT Hub. You
markrad 0:6c46c366f500 8 must provide your hub's connection string in the variable
markrad 0:6c46c366f500 9 'connectionString'.
markrad 0:6c46c366f500 10
markrad 0:6c46c366f500 11 markrad
markrad 0:6c46c366f500 12
markrad 0:6c46c366f500 13 \* -------------------------------------------------------------------------- */
markrad 0:6c46c366f500 14
markrad 0:6c46c366f500 15 #include <string.h>
markrad 0:6c46c366f500 16
markrad 0:6c46c366f500 17 #include "SingletonFXOS8700CQ.h"
markrad 0:6c46c366f500 18
markrad 0:6c46c366f500 19 #include "iothub_client.h"
markrad 0:6c46c366f500 20 #include "iothub_message.h"
markrad 0:6c46c366f500 21 #include "azure_c_shared_utility/threadapi.h"
markrad 0:6c46c366f500 22 #include "azure_c_shared_utility/crt_abstractions.h"
markrad 0:6c46c366f500 23 #include "azure_c_shared_utility/platform.h"
markrad 0:6c46c366f500 24 #include "iothubtransportmqtt.h"
markrad 2:2b9acda15ef0 25 #include "lock.h"
markrad 0:6c46c366f500 26
markrad 0:6c46c366f500 27 #include "certs.h"
markrad 0:6c46c366f500 28
julianhigginson 4:887a51ca4a4c 29 //JH A dummy string to send every 0.5 sec.
julianhigginson 7:0d1a0fe537dc 30 //#define dummystring "{\"timestamp\":12345678901234567890,\"device\":\"JulianTestSensor\",\"A\":[+0000,-0002,+0001],\"B\":[-0002,-0001,-0004],\"C\":[-0003,-0002,-0002],\"D\":[-0002,-0003,-0004],\"E\":[-0002,-0002,-0002],\"F\":[-0002,-0004,-0001],\"G\":[-0001,-0002,-0004],\"H\":[-0003,-0002,-0003],\"I\":[-0003,-0002,+0000],\"J\":[-0002,-0003,-0001],\"K\":[-0003,-0001,-0002],\"L\":[-0001,-0003,-0003],\"M\":[-0003,-0003,-0004],\"N\":[-0001,-0003,-0004],\"O\":[-0003,-0002,+0000],\"P\":[-0001,-0002,-0004],\"Q\":[-0003,-0003,+0000],\"R\":[-0002,-0003,-0002],\"S\":[-0001,-0002,-0004],\"T\":[-0002,-0003,-0003],\"U\":[-0005,-0001,-0002],\"V\":[+0000,-0003,+0000],\"W\":[-0003,-0002,-0008],\"X\":[+0000,-0003,+0000]}"
julianhigginson 7:0d1a0fe537dc 31 #define dummystring "{\"timestamp\":12345678901234567890,\"device\":\"JulianTestSensor\",\"largest magnitude\":1234}"
julianhigginson 4:887a51ca4a4c 32
markrad 0:6c46c366f500 33 int readingToJSON(char *buffer, int bufferlen, READING &reading)
markrad 0:6c46c366f500 34 {
markrad 0:6c46c366f500 35 static const char READING[] = "\"reading\"";
markrad 0:6c46c366f500 36 static const char ACCELEROMETER[] = "\"accelerometer\"";
markrad 0:6c46c366f500 37 static const char MAGNOMETER[] = "\"magnometer\"";
markrad 0:6c46c366f500 38 static const char X[] = "\"X\"";
markrad 0:6c46c366f500 39 static const char Y[] = "\"Y\"";
markrad 0:6c46c366f500 40 static const char Z[] = "\"Z\"";
markrad 0:6c46c366f500 41 static const char STARTOBJ[] = " : {\n";
markrad 0:6c46c366f500 42 static const char ENDOBJ[] = "}\n";
markrad 0:6c46c366f500 43 static const char PREPEND[] = "{\n";
markrad 0:6c46c366f500 44 static const int MINBUFFERLEN =
markrad 0:6c46c366f500 45 sizeof(READING) +
markrad 0:6c46c366f500 46 sizeof(ACCELEROMETER) +
markrad 0:6c46c366f500 47 sizeof(MAGNOMETER) +
markrad 0:6c46c366f500 48 2 * (sizeof(X) + sizeof(Y) + sizeof(Z)) +
markrad 0:6c46c366f500 49 3 * sizeof(STARTOBJ) +
markrad 0:6c46c366f500 50 4 * sizeof(ENDOBJ) +
markrad 0:6c46c366f500 51 sizeof(PREPEND) +
markrad 0:6c46c366f500 52 6 * 9;
markrad 0:6c46c366f500 53 static const char numConvert[] = "%d";
markrad 0:6c46c366f500 54
markrad 0:6c46c366f500 55 char toNum[10];
markrad 0:6c46c366f500 56 char work[MINBUFFERLEN + 1];
markrad 0:6c46c366f500 57
markrad 0:6c46c366f500 58 if (buffer == NULL)
markrad 0:6c46c366f500 59 return 0;
markrad 0:6c46c366f500 60
markrad 0:6c46c366f500 61 buffer[0] = '\0';
markrad 0:6c46c366f500 62
markrad 0:6c46c366f500 63 strcpy(work, PREPEND);
markrad 0:6c46c366f500 64 strcat(work, READING);
markrad 0:6c46c366f500 65 strcat(work, STARTOBJ);
markrad 0:6c46c366f500 66 strcat(work, ACCELEROMETER);
markrad 0:6c46c366f500 67 strcat(work, STARTOBJ);
markrad 0:6c46c366f500 68 strcat(work, X);
markrad 0:6c46c366f500 69 strcat(work, " : ");
markrad 0:6c46c366f500 70 sprintf(toNum, numConvert, reading.accelerometer.x);
markrad 0:6c46c366f500 71 strcat(work, toNum);
markrad 0:6c46c366f500 72 strcat(work, ",\n");
markrad 0:6c46c366f500 73 strcat(work, Y);
markrad 0:6c46c366f500 74 strcat(work, " : ");
markrad 0:6c46c366f500 75 sprintf(toNum, numConvert, reading.accelerometer.y);
markrad 0:6c46c366f500 76 strcat(work, toNum);
markrad 0:6c46c366f500 77 strcat(work, ",\n");
markrad 0:6c46c366f500 78 strcat(work, Z);
markrad 0:6c46c366f500 79 strcat(work, " : ");
markrad 0:6c46c366f500 80 sprintf(toNum, numConvert, reading.accelerometer.z);
markrad 0:6c46c366f500 81 strcat(work, toNum);
markrad 0:6c46c366f500 82 strcat(work, "\n");
markrad 0:6c46c366f500 83 strcat(work, ENDOBJ);
markrad 0:6c46c366f500 84 strcat(work, MAGNOMETER);
markrad 0:6c46c366f500 85 strcat(work, STARTOBJ);
markrad 0:6c46c366f500 86 strcat(work, X);
markrad 0:6c46c366f500 87 strcat(work, " : ");
markrad 0:6c46c366f500 88 sprintf(toNum, numConvert, reading.magnometer.x);
markrad 0:6c46c366f500 89 strcat(work, toNum);
markrad 0:6c46c366f500 90 strcat(work, ",\n");
markrad 0:6c46c366f500 91 strcat(work, Y);
markrad 0:6c46c366f500 92 strcat(work, " : ");
markrad 0:6c46c366f500 93 sprintf(toNum, numConvert, reading.magnometer.y);
markrad 0:6c46c366f500 94 strcat(work, toNum);
markrad 0:6c46c366f500 95 strcat(work, ",\n");
markrad 0:6c46c366f500 96 strcat(work, Z);
markrad 0:6c46c366f500 97 strcat(work, " : ");
markrad 0:6c46c366f500 98 sprintf(toNum, numConvert, reading.magnometer.z);
markrad 0:6c46c366f500 99 strcat(work, toNum);
markrad 0:6c46c366f500 100 strcat(work, "\n");
markrad 0:6c46c366f500 101 strcat(work, ENDOBJ);
markrad 0:6c46c366f500 102 strcat(work, ENDOBJ);
markrad 0:6c46c366f500 103 strcat(work, ENDOBJ);
markrad 0:6c46c366f500 104
julianhigginson 4:887a51ca4a4c 105 //if (strlen(work) + 1 < bufferlen)
julianhigginson 4:887a51ca4a4c 106 // strcpy(buffer, work);
julianhigginson 4:887a51ca4a4c 107 strcpy(buffer,dummystring); //JH send dummystring
julianhigginson 4:887a51ca4a4c 108 //return strlen(work);
julianhigginson 4:887a51ca4a4c 109 return strlen(dummystring); //JH send dummystring
markrad 0:6c46c366f500 110 }
markrad 0:6c46c366f500 111
markrad 2:2b9acda15ef0 112 static LOCK_HANDLE msgLock;
markrad 2:2b9acda15ef0 113 static int msgCount = 0;
markrad 3:c0556ff7b8e3 114 static Timer t;
markrad 3:c0556ff7b8e3 115 static int CONNECTIONTIMEOUT = (20 * 1000);
markrad 2:2b9acda15ef0 116
markrad 0:6c46c366f500 117 static IOTHUBMESSAGE_DISPOSITION_RESULT ReceiveMessageCallback(IOTHUB_MESSAGE_HANDLE message, void* userContextCallback)
markrad 0:6c46c366f500 118 {
markrad 0:6c46c366f500 119 int* counter = (int*)userContextCallback;
markrad 0:6c46c366f500 120 const char* buffer;
markrad 0:6c46c366f500 121 size_t size;
markrad 0:6c46c366f500 122
markrad 0:6c46c366f500 123 if (IoTHubMessage_GetByteArray(message, (const unsigned char**)&buffer, &size) != IOTHUB_MESSAGE_OK)
markrad 0:6c46c366f500 124 {
markrad 0:6c46c366f500 125 (void)printf("unable to retrieve the message data\r\n");
markrad 0:6c46c366f500 126 }
markrad 0:6c46c366f500 127 else
markrad 0:6c46c366f500 128 {
markrad 0:6c46c366f500 129 (void)printf("Received Message [%d] with Data: <<<%.*s>>> & Size=%d\r\n", *counter, (int)size, buffer, (int)size);
markrad 0:6c46c366f500 130 }
markrad 0:6c46c366f500 131
markrad 0:6c46c366f500 132 // Some device specific action code goes here...
markrad 0:6c46c366f500 133 (*counter)++;
markrad 0:6c46c366f500 134
markrad 0:6c46c366f500 135 return IOTHUBMESSAGE_ACCEPTED;
markrad 0:6c46c366f500 136 }
markrad 0:6c46c366f500 137
markrad 0:6c46c366f500 138 static void SendConfirmationCallback(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* userContextCallback)
markrad 0:6c46c366f500 139 {
markrad 2:2b9acda15ef0 140 int* messageTrackingId = (int*)userContextCallback;
markrad 0:6c46c366f500 141
markrad 0:6c46c366f500 142 (void)printf("Confirmation received for message tracking id = %d with result = %s\r\n",
markrad 2:2b9acda15ef0 143 *messageTrackingId, ENUM_TO_STRING(IOTHUB_CLIENT_CONFIRMATION_RESULT, result));
markrad 0:6c46c366f500 144
markrad 2:2b9acda15ef0 145 free(userContextCallback);
markrad 2:2b9acda15ef0 146 Lock(msgLock);
markrad 2:2b9acda15ef0 147 msgCount--;
markrad 3:c0556ff7b8e3 148
markrad 3:c0556ff7b8e3 149 if (result == IOTHUB_CLIENT_CONFIRMATION_OK)
markrad 3:c0556ff7b8e3 150 {
markrad 3:c0556ff7b8e3 151 t.stop();
markrad 3:c0556ff7b8e3 152 t.reset();
markrad 3:c0556ff7b8e3 153 }
markrad 3:c0556ff7b8e3 154
markrad 2:2b9acda15ef0 155 Unlock(msgLock);
markrad 2:2b9acda15ef0 156
markrad 0:6c46c366f500 157 }
markrad 0:6c46c366f500 158
markrad 0:6c46c366f500 159 void stall(Serial &pc, char *message)
markrad 0:6c46c366f500 160 {
markrad 0:6c46c366f500 161 printf(message);
markrad 0:6c46c366f500 162 printf("stalled ");
markrad 0:6c46c366f500 163
markrad 0:6c46c366f500 164 while(true) {
markrad 0:6c46c366f500 165 pc.putc('.'); // idle dots
markrad 0:6c46c366f500 166 wait(1.0);
markrad 0:6c46c366f500 167 }
markrad 0:6c46c366f500 168 }
markrad 0:6c46c366f500 169
markrad 3:c0556ff7b8e3 170 IOTHUB_CLIENT_HANDLE setupConnection(Serial &pc, const char *connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol, void *receiveContext)
markrad 3:c0556ff7b8e3 171 {
markrad 3:c0556ff7b8e3 172 IOTHUB_CLIENT_HANDLE iotHubClientHandle = NULL;
markrad 3:c0556ff7b8e3 173
markrad 3:c0556ff7b8e3 174 printf("Calling platform_init\r\n");
markrad 3:c0556ff7b8e3 175
markrad 3:c0556ff7b8e3 176 while (platform_init())
markrad 3:c0556ff7b8e3 177 {
markrad 3:c0556ff7b8e3 178 pc.putc('P');
markrad 3:c0556ff7b8e3 179 wait(1.0);
markrad 3:c0556ff7b8e3 180 platform_deinit();
markrad 3:c0556ff7b8e3 181 }
markrad 3:c0556ff7b8e3 182
markrad 3:c0556ff7b8e3 183 // if (platform_init() != 0)
markrad 3:c0556ff7b8e3 184 // stall(pc, "Failed to initialize platform\n");
markrad 3:c0556ff7b8e3 185
markrad 3:c0556ff7b8e3 186 printf("Calling IoTHubClient_CreateFromConnectionString\r\n");
markrad 3:c0556ff7b8e3 187 if ((iotHubClientHandle = IoTHubClient_CreateFromConnectionString(connectionString, protocol)) == NULL)
markrad 3:c0556ff7b8e3 188 stall(pc, "ERROR: Could not create iotHubClientHandle\n");
markrad 3:c0556ff7b8e3 189
markrad 3:c0556ff7b8e3 190 bool traceOn = false;
markrad 3:c0556ff7b8e3 191 //bool traceOn = true;
markrad 3:c0556ff7b8e3 192
markrad 3:c0556ff7b8e3 193 printf("Calling IoTHubClient_SetOption logtrace with %d\r\n", traceOn);
markrad 3:c0556ff7b8e3 194 IoTHubClient_SetOption(iotHubClientHandle, "logtrace", &traceOn);
markrad 3:c0556ff7b8e3 195
markrad 3:c0556ff7b8e3 196 // For mbed add the certificate information
markrad 3:c0556ff7b8e3 197 printf("Calling IoTHubClient_SetOption TrustedCerts\r\n");
markrad 3:c0556ff7b8e3 198
markrad 3:c0556ff7b8e3 199 if (IoTHubClient_SetOption(iotHubClientHandle, "TrustedCerts", certificates) != IOTHUB_CLIENT_OK)
markrad 3:c0556ff7b8e3 200 stall(pc, "ERROR: failure to set option \"TrustedCerts\"\n");
markrad 3:c0556ff7b8e3 201
markrad 3:c0556ff7b8e3 202 printf("Calling IoTHubClient_SetMessageCallback\r\n");
markrad 3:c0556ff7b8e3 203
markrad 3:c0556ff7b8e3 204 if (IoTHubClient_SetMessageCallback(iotHubClientHandle, ReceiveMessageCallback, receiveContext) != IOTHUB_CLIENT_OK)
markrad 3:c0556ff7b8e3 205 stall(pc, "ERROR: IoTHubClient_SetMessageCallback failed\r\n");
markrad 3:c0556ff7b8e3 206
markrad 3:c0556ff7b8e3 207 return iotHubClientHandle;
markrad 3:c0556ff7b8e3 208 }
markrad 3:c0556ff7b8e3 209
markrad 3:c0556ff7b8e3 210 void terminateConnection(Serial &pc, IOTHUB_CLIENT_HANDLE iotHubClientHandle)
markrad 3:c0556ff7b8e3 211 {
markrad 3:c0556ff7b8e3 212 printf("Calling IoTHubClient_Destroy\r\n");
markrad 3:c0556ff7b8e3 213 IoTHubClient_Destroy(iotHubClientHandle);
markrad 3:c0556ff7b8e3 214 printf("Calling platform_deinit\r\n");
markrad 3:c0556ff7b8e3 215 platform_deinit();
markrad 3:c0556ff7b8e3 216 printf("Connection terminated\r\n");
markrad 3:c0556ff7b8e3 217 }
markrad 3:c0556ff7b8e3 218
markrad 3:c0556ff7b8e3 219
markrad 0:6c46c366f500 220 int main()
markrad 0:6c46c366f500 221 {
julianhigginson 6:66576aa3d4e3 222 //Mark's IoThub - Mark
julianhigginson 4:887a51ca4a4c 223 //const char *connectionString = "HostName=MarkRadML.azure-devices.net;DeviceId=MBEDTest;SharedAccessKey=rgxlnR0rIBW4vnnnDkrbAv+mSOc/Mt60mg1CEjLx7pY=";
julianhigginson 4:887a51ca4a4c 224
julianhigginson 6:66576aa3d4e3 225 //Julian's IoThub - Julian
julianhigginson 6:66576aa3d4e3 226 const char *connectionString = "HostName=MoI2.azure-devices.net;DeviceId=JulianSensor1;SharedAccessKey=tMJGdbSw6fmKO6tULERuPIBhq1dcJHbrlTHoVm+o0W4=";
julianhigginson 6:66576aa3d4e3 227
julianhigginson 6:66576aa3d4e3 228 //Julian's IoThub - Andy
julianhigginson 6:66576aa3d4e3 229 //const char *connectionString = "HostName=MoI2.azure-devices.net;DeviceId=AndySensor1;SharedAccessKey=Zc08nWRiXh+4tLdE5Zi3Na4I0+pN9N4dnHl7SJqg430=";
markrad 0:6c46c366f500 230
markrad 0:6c46c366f500 231 READING reading;
markrad 0:6c46c366f500 232 Serial pc(USBTX, USBRX); // Primary output to demonstrate library
markrad 0:6c46c366f500 233 SingletonFXOS8700CQ &sfxos = SingletonFXOS8700CQ::getInstance();
markrad 0:6c46c366f500 234 IOTHUB_CLIENT_HANDLE iotHubClientHandle;
markrad 0:6c46c366f500 235 int receiveContext = 0;
markrad 0:6c46c366f500 236 int transmitCounter = 0;
markrad 2:2b9acda15ef0 237
markrad 0:6c46c366f500 238 pc.baud(115200); // Print quickly! 200Hz x line of output data!
markrad 0:6c46c366f500 239
markrad 0:6c46c366f500 240 printf("\n\nFXOS8700CQ identity = %X\n", sfxos.getWhoAmI());
markrad 0:6c46c366f500 241
markrad 2:2b9acda15ef0 242 msgLock = Lock_Init(); // TODO: Check error code
markrad 2:2b9acda15ef0 243
markrad 0:6c46c366f500 244 sfxos.enable();
markrad 0:6c46c366f500 245 sfxos.getData(reading);
markrad 0:6c46c366f500 246
markrad 0:6c46c366f500 247 int rc;
markrad 0:6c46c366f500 248
markrad 1:0366fad6e60c 249 int LOOPCOUNT = -1; // Set to -1 to run forever
markrad 0:6c46c366f500 250
markrad 2:2b9acda15ef0 251 int localMsgCount;
markrad 2:2b9acda15ef0 252 int *userContext;
markrad 2:2b9acda15ef0 253 IOTHUB_MESSAGE_HANDLE msgHandle;
markrad 3:c0556ff7b8e3 254 int elapsedTime = 0;
markrad 2:2b9acda15ef0 255
julianhigginson 4:887a51ca4a4c 256 //char buffer[200];
julianhigginson 4:887a51ca4a4c 257 char buffer [1024]; //JH bigger buffer
markrad 0:6c46c366f500 258
markrad 3:c0556ff7b8e3 259 iotHubClientHandle = setupConnection(pc, connectionString, MQTT_Protocol, &receiveContext);
markrad 3:c0556ff7b8e3 260
markrad 0:6c46c366f500 261 while (LOOPCOUNT)
markrad 0:6c46c366f500 262 {
markrad 0:6c46c366f500 263 if (sfxos.getInt2Triggered())
markrad 0:6c46c366f500 264 {
markrad 0:6c46c366f500 265 sfxos.setInt2Triggered(false);
markrad 0:6c46c366f500 266 sfxos.getData(reading);
markrad 0:6c46c366f500 267 rc = readingToJSON(buffer, sizeof(buffer), reading);
markrad 0:6c46c366f500 268
markrad 0:6c46c366f500 269 if (rc > sizeof(buffer))
markrad 0:6c46c366f500 270 printf("ERROR: JSON buffer too small - require %d characters\n", rc);
markrad 0:6c46c366f500 271
markrad 2:2b9acda15ef0 272 Lock(msgLock);
markrad 2:2b9acda15ef0 273 localMsgCount = msgCount;
markrad 2:2b9acda15ef0 274 Unlock(msgLock);
markrad 0:6c46c366f500 275
markrad 2:2b9acda15ef0 276 if (localMsgCount < 2)
markrad 0:6c46c366f500 277 {
markrad 2:2b9acda15ef0 278 if ((msgHandle = IoTHubMessage_CreateFromByteArray((const unsigned char*)buffer, rc)) == NULL)
markrad 0:6c46c366f500 279 {
markrad 0:6c46c366f500 280 (void)printf("ERROR: iotHubMessageHandle is NULL!\r\n");
markrad 0:6c46c366f500 281 }
markrad 0:6c46c366f500 282 else
markrad 0:6c46c366f500 283 {
markrad 2:2b9acda15ef0 284 userContext = (int *) malloc(sizeof(userContext));
markrad 2:2b9acda15ef0 285
markrad 2:2b9acda15ef0 286 if (userContext != NULL)
markrad 0:6c46c366f500 287 {
markrad 2:2b9acda15ef0 288 *userContext = transmitCounter;
markrad 2:2b9acda15ef0 289
markrad 2:2b9acda15ef0 290 if (IoTHubClient_SendEventAsync(iotHubClientHandle, msgHandle, SendConfirmationCallback, userContext) != IOTHUB_CLIENT_OK)
markrad 2:2b9acda15ef0 291 {
markrad 2:2b9acda15ef0 292 (void)printf("ERROR: IoTHubClient_LL_SendEventAsync..........FAILED!\r\n");
markrad 2:2b9acda15ef0 293 }
markrad 2:2b9acda15ef0 294 else
markrad 2:2b9acda15ef0 295 {
markrad 2:2b9acda15ef0 296 (void)printf("IoTHubClient_LL_SendEventAsync accepted message [%d] for transmission to IoT Hub.\r\n", (int)transmitCounter);
markrad 2:2b9acda15ef0 297 }
markrad 2:2b9acda15ef0 298
markrad 2:2b9acda15ef0 299 IoTHubMessage_Destroy(msgHandle);
markrad 2:2b9acda15ef0 300 Lock(msgLock);
markrad 2:2b9acda15ef0 301 msgCount++;
markrad 3:c0556ff7b8e3 302 t.start();
markrad 2:2b9acda15ef0 303 Unlock(msgLock);
markrad 2:2b9acda15ef0 304
markrad 2:2b9acda15ef0 305 transmitCounter++;
markrad 0:6c46c366f500 306 }
markrad 0:6c46c366f500 307 else
markrad 0:6c46c366f500 308 {
markrad 2:2b9acda15ef0 309 (void)printf("ERROR: malloc - unable to allocate user context\r\n");
markrad 0:6c46c366f500 310 }
markrad 0:6c46c366f500 311 }
markrad 0:6c46c366f500 312 }
markrad 2:2b9acda15ef0 313 else
markrad 2:2b9acda15ef0 314 {
markrad 2:2b9acda15ef0 315 (void)printf("Message dropped queue length %d\r\n", localMsgCount);
markrad 2:2b9acda15ef0 316 }
markrad 0:6c46c366f500 317
markrad 3:c0556ff7b8e3 318 Lock(msgLock);
markrad 3:c0556ff7b8e3 319 elapsedTime = t.read_ms();
markrad 3:c0556ff7b8e3 320 Unlock(msgLock);
markrad 3:c0556ff7b8e3 321
markrad 3:c0556ff7b8e3 322 if (elapsedTime > CONNECTIONTIMEOUT)
markrad 3:c0556ff7b8e3 323 {
markrad 3:c0556ff7b8e3 324 printf("No response for %d milliseconds - attempt reconnection\r\n", elapsedTime);
markrad 3:c0556ff7b8e3 325 NVIC_SystemReset(); // Just blow it all away
markrad 3:c0556ff7b8e3 326 terminateConnection(pc, iotHubClientHandle);
markrad 3:c0556ff7b8e3 327 iotHubClientHandle = setupConnection(pc, connectionString, MQTT_Protocol, &receiveContext);
markrad 3:c0556ff7b8e3 328 printf("Reconnection complete\r\n");
markrad 3:c0556ff7b8e3 329 }
markrad 3:c0556ff7b8e3 330
markrad 3:c0556ff7b8e3 331 if (LOOPCOUNT > 0)
markrad 3:c0556ff7b8e3 332 LOOPCOUNT--;
markrad 0:6c46c366f500 333 }
markrad 0:6c46c366f500 334
markrad 0:6c46c366f500 335 wait_ms(500);
markrad 0:6c46c366f500 336 }
markrad 0:6c46c366f500 337
markrad 0:6c46c366f500 338 printf("Loop complete - clean up\n");
markrad 0:6c46c366f500 339
markrad 3:c0556ff7b8e3 340 terminateConnection(pc, iotHubClientHandle);
markrad 2:2b9acda15ef0 341 Lock_Deinit(msgLock);
markrad 2:2b9acda15ef0 342
markrad 0:6c46c366f500 343 printf("Test complete\n");
markrad 0:6c46c366f500 344
markrad 0:6c46c366f500 345
markrad 0:6c46c366f500 346 while(true) {
markrad 0:6c46c366f500 347 pc.putc('.'); // idle dots
markrad 0:6c46c366f500 348 wait(1.0);
markrad 0:6c46c366f500 349 }
markrad 0:6c46c366f500 350 }