Simple sample that demonstrates reading the FXOS8700CQ accelerometer, convert the data to JSON and send to an Azure IoT Hub.

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

Committer:
markrad
Date:
Wed Mar 22 20:10:27 2017 +0000
Revision:
4:9b3da9969b1b
Parent:
3:c0556ff7b8e3
Child:
5:3d814faa2b2e
50 readings a second, 1 message a second

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 4:9b3da9969b1b 16 #include <limits.h>
markrad 0:6c46c366f500 17
markrad 0:6c46c366f500 18 #include "SingletonFXOS8700CQ.h"
markrad 0:6c46c366f500 19
markrad 0:6c46c366f500 20 #include "iothub_client.h"
markrad 0:6c46c366f500 21 #include "iothub_message.h"
markrad 0:6c46c366f500 22 #include "azure_c_shared_utility/threadapi.h"
markrad 0:6c46c366f500 23 #include "azure_c_shared_utility/crt_abstractions.h"
markrad 0:6c46c366f500 24 #include "azure_c_shared_utility/platform.h"
markrad 0:6c46c366f500 25 #include "iothubtransportmqtt.h"
markrad 2:2b9acda15ef0 26 #include "lock.h"
markrad 0:6c46c366f500 27
markrad 0:6c46c366f500 28 #include "certs.h"
markrad 0:6c46c366f500 29
markrad 4:9b3da9969b1b 30 /*
markrad 0:6c46c366f500 31 int readingToJSON(char *buffer, int bufferlen, READING &reading)
markrad 0:6c46c366f500 32 {
markrad 0:6c46c366f500 33 static const char READING[] = "\"reading\"";
markrad 0:6c46c366f500 34 static const char ACCELEROMETER[] = "\"accelerometer\"";
markrad 0:6c46c366f500 35 static const char MAGNOMETER[] = "\"magnometer\"";
markrad 0:6c46c366f500 36 static const char X[] = "\"X\"";
markrad 0:6c46c366f500 37 static const char Y[] = "\"Y\"";
markrad 0:6c46c366f500 38 static const char Z[] = "\"Z\"";
markrad 0:6c46c366f500 39 static const char STARTOBJ[] = " : {\n";
markrad 0:6c46c366f500 40 static const char ENDOBJ[] = "}\n";
markrad 0:6c46c366f500 41 static const char PREPEND[] = "{\n";
markrad 0:6c46c366f500 42 static const int MINBUFFERLEN =
markrad 0:6c46c366f500 43 sizeof(READING) +
markrad 0:6c46c366f500 44 sizeof(ACCELEROMETER) +
markrad 0:6c46c366f500 45 sizeof(MAGNOMETER) +
markrad 0:6c46c366f500 46 2 * (sizeof(X) + sizeof(Y) + sizeof(Z)) +
markrad 0:6c46c366f500 47 3 * sizeof(STARTOBJ) +
markrad 0:6c46c366f500 48 4 * sizeof(ENDOBJ) +
markrad 0:6c46c366f500 49 sizeof(PREPEND) +
markrad 0:6c46c366f500 50 6 * 9;
markrad 0:6c46c366f500 51 static const char numConvert[] = "%d";
markrad 0:6c46c366f500 52
markrad 0:6c46c366f500 53 char toNum[10];
markrad 0:6c46c366f500 54 char work[MINBUFFERLEN + 1];
markrad 0:6c46c366f500 55
markrad 0:6c46c366f500 56 if (buffer == NULL)
markrad 0:6c46c366f500 57 return 0;
markrad 0:6c46c366f500 58
markrad 0:6c46c366f500 59 buffer[0] = '\0';
markrad 0:6c46c366f500 60
markrad 0:6c46c366f500 61 strcpy(work, PREPEND);
markrad 0:6c46c366f500 62 strcat(work, READING);
markrad 0:6c46c366f500 63 strcat(work, STARTOBJ);
markrad 0:6c46c366f500 64 strcat(work, ACCELEROMETER);
markrad 0:6c46c366f500 65 strcat(work, STARTOBJ);
markrad 0:6c46c366f500 66 strcat(work, X);
markrad 0:6c46c366f500 67 strcat(work, " : ");
markrad 0:6c46c366f500 68 sprintf(toNum, numConvert, reading.accelerometer.x);
markrad 0:6c46c366f500 69 strcat(work, toNum);
markrad 0:6c46c366f500 70 strcat(work, ",\n");
markrad 0:6c46c366f500 71 strcat(work, Y);
markrad 0:6c46c366f500 72 strcat(work, " : ");
markrad 0:6c46c366f500 73 sprintf(toNum, numConvert, reading.accelerometer.y);
markrad 0:6c46c366f500 74 strcat(work, toNum);
markrad 0:6c46c366f500 75 strcat(work, ",\n");
markrad 0:6c46c366f500 76 strcat(work, Z);
markrad 0:6c46c366f500 77 strcat(work, " : ");
markrad 0:6c46c366f500 78 sprintf(toNum, numConvert, reading.accelerometer.z);
markrad 0:6c46c366f500 79 strcat(work, toNum);
markrad 0:6c46c366f500 80 strcat(work, "\n");
markrad 0:6c46c366f500 81 strcat(work, ENDOBJ);
markrad 0:6c46c366f500 82 strcat(work, MAGNOMETER);
markrad 0:6c46c366f500 83 strcat(work, STARTOBJ);
markrad 0:6c46c366f500 84 strcat(work, X);
markrad 0:6c46c366f500 85 strcat(work, " : ");
markrad 0:6c46c366f500 86 sprintf(toNum, numConvert, reading.magnometer.x);
markrad 0:6c46c366f500 87 strcat(work, toNum);
markrad 0:6c46c366f500 88 strcat(work, ",\n");
markrad 0:6c46c366f500 89 strcat(work, Y);
markrad 0:6c46c366f500 90 strcat(work, " : ");
markrad 0:6c46c366f500 91 sprintf(toNum, numConvert, reading.magnometer.y);
markrad 0:6c46c366f500 92 strcat(work, toNum);
markrad 0:6c46c366f500 93 strcat(work, ",\n");
markrad 0:6c46c366f500 94 strcat(work, Z);
markrad 0:6c46c366f500 95 strcat(work, " : ");
markrad 0:6c46c366f500 96 sprintf(toNum, numConvert, reading.magnometer.z);
markrad 0:6c46c366f500 97 strcat(work, toNum);
markrad 0:6c46c366f500 98 strcat(work, "\n");
markrad 0:6c46c366f500 99 strcat(work, ENDOBJ);
markrad 0:6c46c366f500 100 strcat(work, ENDOBJ);
markrad 0:6c46c366f500 101 strcat(work, ENDOBJ);
markrad 0:6c46c366f500 102
markrad 0:6c46c366f500 103 if (strlen(work) + 1 < bufferlen)
markrad 0:6c46c366f500 104 strcpy(buffer, work);
markrad 0:6c46c366f500 105
markrad 0:6c46c366f500 106 return strlen(work);
markrad 0:6c46c366f500 107 }
markrad 4:9b3da9969b1b 108 */
markrad 4:9b3da9969b1b 109
markrad 4:9b3da9969b1b 110 static int JSONifyData(char *buffer, int bufferlen, int reading)
markrad 4:9b3da9969b1b 111 {
markrad 4:9b3da9969b1b 112 static const char *format = "{ \"device\": %s, \"reading\": %f }";
markrad 4:9b3da9969b1b 113 double work;
markrad 4:9b3da9969b1b 114 int rc;
markrad 4:9b3da9969b1b 115
markrad 4:9b3da9969b1b 116 work = sqrt((double)reading);
markrad 4:9b3da9969b1b 117 rc = snprintf(buffer, bufferlen, format, "mydevice", work);
markrad 4:9b3da9969b1b 118
markrad 4:9b3da9969b1b 119 if (rc < 0)
markrad 4:9b3da9969b1b 120 printf("*** ERROR *** out of buffer space\r\n");
markrad 4:9b3da9969b1b 121
markrad 4:9b3da9969b1b 122 return rc;
markrad 4:9b3da9969b1b 123 }
markrad 0:6c46c366f500 124
markrad 2:2b9acda15ef0 125 static LOCK_HANDLE msgLock;
markrad 2:2b9acda15ef0 126 static int msgCount = 0;
markrad 3:c0556ff7b8e3 127 static Timer t;
markrad 3:c0556ff7b8e3 128 static int CONNECTIONTIMEOUT = (20 * 1000);
markrad 2:2b9acda15ef0 129
markrad 0:6c46c366f500 130 static IOTHUBMESSAGE_DISPOSITION_RESULT ReceiveMessageCallback(IOTHUB_MESSAGE_HANDLE message, void* userContextCallback)
markrad 0:6c46c366f500 131 {
markrad 0:6c46c366f500 132 int* counter = (int*)userContextCallback;
markrad 0:6c46c366f500 133 const char* buffer;
markrad 0:6c46c366f500 134 size_t size;
markrad 0:6c46c366f500 135
markrad 0:6c46c366f500 136 if (IoTHubMessage_GetByteArray(message, (const unsigned char**)&buffer, &size) != IOTHUB_MESSAGE_OK)
markrad 0:6c46c366f500 137 {
markrad 0:6c46c366f500 138 (void)printf("unable to retrieve the message data\r\n");
markrad 0:6c46c366f500 139 }
markrad 0:6c46c366f500 140 else
markrad 0:6c46c366f500 141 {
markrad 0:6c46c366f500 142 (void)printf("Received Message [%d] with Data: <<<%.*s>>> & Size=%d\r\n", *counter, (int)size, buffer, (int)size);
markrad 0:6c46c366f500 143 }
markrad 0:6c46c366f500 144
markrad 0:6c46c366f500 145 // Some device specific action code goes here...
markrad 0:6c46c366f500 146 (*counter)++;
markrad 0:6c46c366f500 147
markrad 0:6c46c366f500 148 return IOTHUBMESSAGE_ACCEPTED;
markrad 0:6c46c366f500 149 }
markrad 0:6c46c366f500 150
markrad 0:6c46c366f500 151 static void SendConfirmationCallback(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* userContextCallback)
markrad 0:6c46c366f500 152 {
markrad 2:2b9acda15ef0 153 int* messageTrackingId = (int*)userContextCallback;
markrad 0:6c46c366f500 154
markrad 0:6c46c366f500 155 (void)printf("Confirmation received for message tracking id = %d with result = %s\r\n",
markrad 2:2b9acda15ef0 156 *messageTrackingId, ENUM_TO_STRING(IOTHUB_CLIENT_CONFIRMATION_RESULT, result));
markrad 0:6c46c366f500 157
markrad 2:2b9acda15ef0 158 free(userContextCallback);
markrad 2:2b9acda15ef0 159 Lock(msgLock);
markrad 2:2b9acda15ef0 160 msgCount--;
markrad 3:c0556ff7b8e3 161
markrad 3:c0556ff7b8e3 162 if (result == IOTHUB_CLIENT_CONFIRMATION_OK)
markrad 3:c0556ff7b8e3 163 {
markrad 3:c0556ff7b8e3 164 t.stop();
markrad 3:c0556ff7b8e3 165 t.reset();
markrad 3:c0556ff7b8e3 166 }
markrad 3:c0556ff7b8e3 167
markrad 2:2b9acda15ef0 168 Unlock(msgLock);
markrad 2:2b9acda15ef0 169
markrad 0:6c46c366f500 170 }
markrad 0:6c46c366f500 171
markrad 0:6c46c366f500 172 void stall(Serial &pc, char *message)
markrad 0:6c46c366f500 173 {
markrad 0:6c46c366f500 174 printf(message);
markrad 0:6c46c366f500 175 printf("stalled ");
markrad 0:6c46c366f500 176
markrad 4:9b3da9969b1b 177 while(true)
markrad 4:9b3da9969b1b 178 {
markrad 0:6c46c366f500 179 pc.putc('.'); // idle dots
markrad 0:6c46c366f500 180 wait(1.0);
markrad 0:6c46c366f500 181 }
markrad 0:6c46c366f500 182 }
markrad 0:6c46c366f500 183
markrad 3:c0556ff7b8e3 184 IOTHUB_CLIENT_HANDLE setupConnection(Serial &pc, const char *connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol, void *receiveContext)
markrad 3:c0556ff7b8e3 185 {
markrad 3:c0556ff7b8e3 186 IOTHUB_CLIENT_HANDLE iotHubClientHandle = NULL;
markrad 3:c0556ff7b8e3 187
markrad 3:c0556ff7b8e3 188 printf("Calling platform_init\r\n");
markrad 3:c0556ff7b8e3 189
markrad 3:c0556ff7b8e3 190 while (platform_init())
markrad 3:c0556ff7b8e3 191 {
markrad 3:c0556ff7b8e3 192 pc.putc('P');
markrad 3:c0556ff7b8e3 193 wait(1.0);
markrad 3:c0556ff7b8e3 194 platform_deinit();
markrad 3:c0556ff7b8e3 195 }
markrad 3:c0556ff7b8e3 196
markrad 3:c0556ff7b8e3 197 // if (platform_init() != 0)
markrad 3:c0556ff7b8e3 198 // stall(pc, "Failed to initialize platform\n");
markrad 3:c0556ff7b8e3 199
markrad 3:c0556ff7b8e3 200 printf("Calling IoTHubClient_CreateFromConnectionString\r\n");
markrad 3:c0556ff7b8e3 201 if ((iotHubClientHandle = IoTHubClient_CreateFromConnectionString(connectionString, protocol)) == NULL)
markrad 3:c0556ff7b8e3 202 stall(pc, "ERROR: Could not create iotHubClientHandle\n");
markrad 3:c0556ff7b8e3 203
markrad 3:c0556ff7b8e3 204 bool traceOn = false;
markrad 3:c0556ff7b8e3 205 //bool traceOn = true;
markrad 3:c0556ff7b8e3 206
markrad 3:c0556ff7b8e3 207 printf("Calling IoTHubClient_SetOption logtrace with %d\r\n", traceOn);
markrad 3:c0556ff7b8e3 208 IoTHubClient_SetOption(iotHubClientHandle, "logtrace", &traceOn);
markrad 3:c0556ff7b8e3 209
markrad 3:c0556ff7b8e3 210 // For mbed add the certificate information
markrad 3:c0556ff7b8e3 211 printf("Calling IoTHubClient_SetOption TrustedCerts\r\n");
markrad 3:c0556ff7b8e3 212
markrad 3:c0556ff7b8e3 213 if (IoTHubClient_SetOption(iotHubClientHandle, "TrustedCerts", certificates) != IOTHUB_CLIENT_OK)
markrad 3:c0556ff7b8e3 214 stall(pc, "ERROR: failure to set option \"TrustedCerts\"\n");
markrad 3:c0556ff7b8e3 215
markrad 3:c0556ff7b8e3 216 printf("Calling IoTHubClient_SetMessageCallback\r\n");
markrad 3:c0556ff7b8e3 217
markrad 3:c0556ff7b8e3 218 if (IoTHubClient_SetMessageCallback(iotHubClientHandle, ReceiveMessageCallback, receiveContext) != IOTHUB_CLIENT_OK)
markrad 3:c0556ff7b8e3 219 stall(pc, "ERROR: IoTHubClient_SetMessageCallback failed\r\n");
markrad 3:c0556ff7b8e3 220
markrad 3:c0556ff7b8e3 221 return iotHubClientHandle;
markrad 3:c0556ff7b8e3 222 }
markrad 3:c0556ff7b8e3 223
markrad 3:c0556ff7b8e3 224 void terminateConnection(Serial &pc, IOTHUB_CLIENT_HANDLE iotHubClientHandle)
markrad 3:c0556ff7b8e3 225 {
markrad 3:c0556ff7b8e3 226 printf("Calling IoTHubClient_Destroy\r\n");
markrad 3:c0556ff7b8e3 227 IoTHubClient_Destroy(iotHubClientHandle);
markrad 3:c0556ff7b8e3 228 printf("Calling platform_deinit\r\n");
markrad 3:c0556ff7b8e3 229 platform_deinit();
markrad 3:c0556ff7b8e3 230 printf("Connection terminated\r\n");
markrad 3:c0556ff7b8e3 231 }
markrad 3:c0556ff7b8e3 232
markrad 3:c0556ff7b8e3 233
markrad 0:6c46c366f500 234 int main()
markrad 0:6c46c366f500 235 {
markrad 4:9b3da9969b1b 236 const char *connectionString = "HostName=MarkRadHub1.azure-devices.net;DeviceId=mrcc3200;SharedAccessKey=8pGKChTBsz0VGw234iLX7XDDKwcyWRC7hsrVZEHfZHs=";
markrad 0:6c46c366f500 237
markrad 0:6c46c366f500 238 READING reading;
markrad 0:6c46c366f500 239 Serial pc(USBTX, USBRX); // Primary output to demonstrate library
markrad 0:6c46c366f500 240 SingletonFXOS8700CQ &sfxos = SingletonFXOS8700CQ::getInstance();
markrad 0:6c46c366f500 241 IOTHUB_CLIENT_HANDLE iotHubClientHandle;
markrad 0:6c46c366f500 242 int receiveContext = 0;
markrad 0:6c46c366f500 243 int transmitCounter = 0;
markrad 2:2b9acda15ef0 244
markrad 0:6c46c366f500 245 pc.baud(115200); // Print quickly! 200Hz x line of output data!
markrad 0:6c46c366f500 246
markrad 0:6c46c366f500 247 printf("\n\nFXOS8700CQ identity = %X\n", sfxos.getWhoAmI());
markrad 0:6c46c366f500 248
markrad 2:2b9acda15ef0 249 msgLock = Lock_Init(); // TODO: Check error code
markrad 2:2b9acda15ef0 250
markrad 0:6c46c366f500 251 sfxos.enable();
markrad 0:6c46c366f500 252 sfxos.getData(reading);
markrad 0:6c46c366f500 253
markrad 0:6c46c366f500 254 int rc;
markrad 0:6c46c366f500 255
markrad 1:0366fad6e60c 256 int LOOPCOUNT = -1; // Set to -1 to run forever
markrad 0:6c46c366f500 257
markrad 2:2b9acda15ef0 258 int localMsgCount;
markrad 2:2b9acda15ef0 259 int *userContext;
markrad 2:2b9acda15ef0 260 IOTHUB_MESSAGE_HANDLE msgHandle;
markrad 3:c0556ff7b8e3 261 int elapsedTime = 0;
markrad 2:2b9acda15ef0 262
markrad 0:6c46c366f500 263 char buffer[200];
markrad 0:6c46c366f500 264
markrad 3:c0556ff7b8e3 265 iotHubClientHandle = setupConnection(pc, connectionString, MQTT_Protocol, &receiveContext);
markrad 3:c0556ff7b8e3 266
markrad 4:9b3da9969b1b 267 int readCount = 0;
markrad 4:9b3da9969b1b 268 int32_t maxVal = LONG_MIN;
markrad 4:9b3da9969b1b 269 int32_t curVal;
markrad 4:9b3da9969b1b 270
markrad 0:6c46c366f500 271 while (LOOPCOUNT)
markrad 0:6c46c366f500 272 {
markrad 0:6c46c366f500 273 if (sfxos.getInt2Triggered())
markrad 0:6c46c366f500 274 {
markrad 0:6c46c366f500 275 sfxos.setInt2Triggered(false);
markrad 0:6c46c366f500 276 sfxos.getData(reading);
markrad 4:9b3da9969b1b 277 curVal = (reading.accelerometer.x * reading.accelerometer.x) + (reading.accelerometer.y * reading.accelerometer.y);
markrad 4:9b3da9969b1b 278
markrad 4:9b3da9969b1b 279 printf("curVal=%d;maxVal=%d\r\n", curVal, maxVal);
markrad 0:6c46c366f500 280
markrad 4:9b3da9969b1b 281 if (curVal > maxVal)
markrad 4:9b3da9969b1b 282 maxVal = curVal;
markrad 4:9b3da9969b1b 283
markrad 4:9b3da9969b1b 284 //rc = readingToJSON(buffer, sizeof(buffer), reading);
markrad 4:9b3da9969b1b 285
markrad 4:9b3da9969b1b 286 //if (rc > sizeof(buffer))
markrad 4:9b3da9969b1b 287 //printf("ERROR: JSON buffer too small - require %d characters\n", rc);
markrad 0:6c46c366f500 288
markrad 4:9b3da9969b1b 289 if (++readCount >= 50)
markrad 0:6c46c366f500 290 {
markrad 4:9b3da9969b1b 291 Lock(msgLock);
markrad 4:9b3da9969b1b 292 localMsgCount = msgCount;
markrad 4:9b3da9969b1b 293 Unlock(msgLock);
markrad 4:9b3da9969b1b 294
markrad 4:9b3da9969b1b 295 if (localMsgCount < 2)
markrad 0:6c46c366f500 296 {
markrad 4:9b3da9969b1b 297 rc = JSONifyData(buffer, sizeof(buffer), maxVal);
markrad 4:9b3da9969b1b 298 printf("DATA >>>%s<<<\r\n", buffer);
markrad 2:2b9acda15ef0 299
markrad 4:9b3da9969b1b 300 if ((msgHandle = IoTHubMessage_CreateFromByteArray((const unsigned char*)buffer, rc)) == NULL)
markrad 4:9b3da9969b1b 301 {
markrad 4:9b3da9969b1b 302 (void)printf("ERROR: iotHubMessageHandle is NULL!\r\n");
markrad 4:9b3da9969b1b 303 }
markrad 4:9b3da9969b1b 304 else
markrad 0:6c46c366f500 305 {
markrad 4:9b3da9969b1b 306 userContext = (int *) malloc(sizeof(userContext));
markrad 4:9b3da9969b1b 307
markrad 4:9b3da9969b1b 308 if (userContext != NULL)
markrad 2:2b9acda15ef0 309 {
markrad 4:9b3da9969b1b 310 *userContext = transmitCounter;
markrad 4:9b3da9969b1b 311
markrad 4:9b3da9969b1b 312 if (IoTHubClient_SendEventAsync(iotHubClientHandle, msgHandle, SendConfirmationCallback, userContext) != IOTHUB_CLIENT_OK)
markrad 4:9b3da9969b1b 313 {
markrad 4:9b3da9969b1b 314 (void)printf("ERROR: IoTHubClient_LL_SendEventAsync..........FAILED!\r\n");
markrad 4:9b3da9969b1b 315 }
markrad 4:9b3da9969b1b 316 else
markrad 4:9b3da9969b1b 317 {
markrad 4:9b3da9969b1b 318 (void)printf("IoTHubClient_LL_SendEventAsync accepted message [%d] for transmission to IoT Hub.\r\n", (int)transmitCounter);
markrad 4:9b3da9969b1b 319 }
markrad 4:9b3da9969b1b 320
markrad 4:9b3da9969b1b 321 IoTHubMessage_Destroy(msgHandle);
markrad 4:9b3da9969b1b 322 Lock(msgLock);
markrad 4:9b3da9969b1b 323 msgCount++;
markrad 4:9b3da9969b1b 324 t.start();
markrad 4:9b3da9969b1b 325 Unlock(msgLock);
markrad 4:9b3da9969b1b 326
markrad 4:9b3da9969b1b 327 transmitCounter++;
markrad 2:2b9acda15ef0 328 }
markrad 2:2b9acda15ef0 329 else
markrad 2:2b9acda15ef0 330 {
markrad 4:9b3da9969b1b 331 (void)printf("ERROR: malloc - unable to allocate user context\r\n");
markrad 2:2b9acda15ef0 332 }
markrad 0:6c46c366f500 333 }
markrad 0:6c46c366f500 334 }
markrad 4:9b3da9969b1b 335 else
markrad 4:9b3da9969b1b 336 {
markrad 4:9b3da9969b1b 337 (void)printf("Message dropped queue length %d\r\n", localMsgCount);
markrad 4:9b3da9969b1b 338 }
markrad 4:9b3da9969b1b 339
markrad 4:9b3da9969b1b 340 Lock(msgLock);
markrad 4:9b3da9969b1b 341 elapsedTime = t.read_ms();
markrad 4:9b3da9969b1b 342 Unlock(msgLock);
markrad 4:9b3da9969b1b 343
markrad 4:9b3da9969b1b 344 if (elapsedTime > CONNECTIONTIMEOUT)
markrad 4:9b3da9969b1b 345 {
markrad 4:9b3da9969b1b 346 printf("No response for %d milliseconds - attempt reconnection\r\n", elapsedTime);
markrad 4:9b3da9969b1b 347 NVIC_SystemReset(); // Just blow it all away
markrad 4:9b3da9969b1b 348 terminateConnection(pc, iotHubClientHandle);
markrad 4:9b3da9969b1b 349 iotHubClientHandle = setupConnection(pc, connectionString, MQTT_Protocol, &receiveContext);
markrad 4:9b3da9969b1b 350 printf("Reconnection complete\r\n");
markrad 4:9b3da9969b1b 351 }
markrad 4:9b3da9969b1b 352
markrad 4:9b3da9969b1b 353 if (LOOPCOUNT > 0)
markrad 4:9b3da9969b1b 354 LOOPCOUNT--;
markrad 4:9b3da9969b1b 355
markrad 4:9b3da9969b1b 356 readCount = 0;
markrad 4:9b3da9969b1b 357 maxVal = LONG_MIN;
markrad 2:2b9acda15ef0 358 }
markrad 4:9b3da9969b1b 359 }
markrad 4:9b3da9969b1b 360 else
markrad 4:9b3da9969b1b 361 {
markrad 4:9b3da9969b1b 362 printf("*** WARNING*** Sensor was not ready in time\r\n");
markrad 0:6c46c366f500 363 }
markrad 0:6c46c366f500 364
markrad 4:9b3da9969b1b 365 // Read at 50 hz
markrad 4:9b3da9969b1b 366 wait_ms(20);
markrad 0:6c46c366f500 367 }
markrad 0:6c46c366f500 368
markrad 0:6c46c366f500 369 printf("Loop complete - clean up\n");
markrad 0:6c46c366f500 370
markrad 3:c0556ff7b8e3 371 terminateConnection(pc, iotHubClientHandle);
markrad 2:2b9acda15ef0 372 Lock_Deinit(msgLock);
markrad 2:2b9acda15ef0 373
markrad 0:6c46c366f500 374 printf("Test complete\n");
markrad 0:6c46c366f500 375
markrad 0:6c46c366f500 376
markrad 4:9b3da9969b1b 377 while(true)
markrad 4:9b3da9969b1b 378 {
markrad 0:6c46c366f500 379 pc.putc('.'); // idle dots
markrad 0:6c46c366f500 380 wait(1.0);
markrad 0:6c46c366f500 381 }
markrad 0:6c46c366f500 382 }