M2XStreamClient fork with a workaround in M2XStreamClient.cpp for the MTS_Wifi_Connect_M2X example.

Dependents:   STM32_MTS_Wifi_Connect_M2X M2X_STM32_MTS_Temp MTS_WiFi_Connect_M2X_Example

Fork of M2XStreamClient by AT&T M2X Team

Committer:
joe_tijerina
Date:
Tue Aug 26 15:20:40 2014 +0000
Revision:
2:6fbc104d1321
Parent:
0:f479e4f4db0e
Fixed compiler warning (added ifndef MIN to avoid defining duplicate MIN define)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jb8414 0:f479e4f4db0e 1 #ifndef M2XStreamClient_template_h
jb8414 0:f479e4f4db0e 2 #define M2XStreamClient_template_h
jb8414 0:f479e4f4db0e 3
jb8414 0:f479e4f4db0e 4 // Implementations of template functions
jb8414 0:f479e4f4db0e 5
jb8414 0:f479e4f4db0e 6 int print_encoded_string(Print* print, const char* str);
jb8414 0:f479e4f4db0e 7
jb8414 0:f479e4f4db0e 8 template <class T>
jb8414 0:f479e4f4db0e 9 int M2XStreamClient::post(const char* feedId, const char* streamName, T value) {
jb8414 0:f479e4f4db0e 10 if (_client->connect(_host, _port)) {
jb8414 0:f479e4f4db0e 11 DBGLN("%s", "Connected to M2X server!");
jb8414 0:f479e4f4db0e 12 writePostHeader(feedId, streamName,
jb8414 0:f479e4f4db0e 13 // for {"value": and }
jb8414 0:f479e4f4db0e 14 _null_print.print(value) + 10);
jb8414 0:f479e4f4db0e 15 _client->print("{\"value\":");
jb8414 0:f479e4f4db0e 16 _client->print(value);
jb8414 0:f479e4f4db0e 17 _client->print("}");
jb8414 0:f479e4f4db0e 18 } else {
jb8414 0:f479e4f4db0e 19 DBGLN("%s", "ERROR: Cannot connect to M2X server!");
jb8414 0:f479e4f4db0e 20 return E_NOCONNECTION;
jb8414 0:f479e4f4db0e 21 }
jb8414 0:f479e4f4db0e 22
jb8414 0:f479e4f4db0e 23 return readStatusCode(true);
jb8414 0:f479e4f4db0e 24 }
jb8414 0:f479e4f4db0e 25
jb8414 0:f479e4f4db0e 26 template <class T>
jb8414 0:f479e4f4db0e 27 inline int write_multiple_values(Print* print, int streamNum,
jb8414 0:f479e4f4db0e 28 const char* names[], const int counts[],
jb8414 0:f479e4f4db0e 29 const char* ats[], T values[]) {
jb8414 0:f479e4f4db0e 30 int bytes = 0, value_index = 0;
jb8414 0:f479e4f4db0e 31 bytes += print->print("{\"values\":{");
jb8414 0:f479e4f4db0e 32 for (int i = 0; i < streamNum; i++) {
jb8414 0:f479e4f4db0e 33 bytes += print->print("\"");
jb8414 0:f479e4f4db0e 34 bytes += print->print(names[i]);
jb8414 0:f479e4f4db0e 35 bytes += print->print("\":[");
jb8414 0:f479e4f4db0e 36 for (int j = 0; j < counts[i]; j++) {
jb8414 0:f479e4f4db0e 37 bytes += print->print("{");
jb8414 0:f479e4f4db0e 38 if (ats && ats[value_index]) {
jb8414 0:f479e4f4db0e 39 bytes += print->print("\"at\": \"");
jb8414 0:f479e4f4db0e 40 bytes += print->print(ats[value_index]);
jb8414 0:f479e4f4db0e 41 bytes += print->print("\",");
jb8414 0:f479e4f4db0e 42 }
jb8414 0:f479e4f4db0e 43 bytes += print->print("\"value\": \"");
jb8414 0:f479e4f4db0e 44 bytes += print->print(values[value_index]);
jb8414 0:f479e4f4db0e 45 bytes += print->print("\"}");
jb8414 0:f479e4f4db0e 46 if (j < counts[i] - 1) { bytes += print->print(","); }
jb8414 0:f479e4f4db0e 47 value_index++;
jb8414 0:f479e4f4db0e 48 }
jb8414 0:f479e4f4db0e 49 bytes += print->print("]");
jb8414 0:f479e4f4db0e 50 if (i < streamNum - 1) { bytes += print->print(","); }
jb8414 0:f479e4f4db0e 51 }
jb8414 0:f479e4f4db0e 52 bytes += print->print("}}");
jb8414 0:f479e4f4db0e 53 return bytes;
jb8414 0:f479e4f4db0e 54 }
jb8414 0:f479e4f4db0e 55
jb8414 0:f479e4f4db0e 56 template <class T>
jb8414 0:f479e4f4db0e 57 int M2XStreamClient::postMultiple(const char* feedId, int streamNum,
jb8414 0:f479e4f4db0e 58 const char* names[], const int counts[],
jb8414 0:f479e4f4db0e 59 const char* ats[], T values[]) {
jb8414 0:f479e4f4db0e 60 if (_client->connect(_host, _port)) {
jb8414 0:f479e4f4db0e 61 DBGLN("%s", "Connected to M2X server!");
jb8414 0:f479e4f4db0e 62 int length = write_multiple_values(&_null_print, streamNum, names,
jb8414 0:f479e4f4db0e 63 counts, ats, values);
jb8414 0:f479e4f4db0e 64 _client->print("POST /v1/feeds/");
jb8414 0:f479e4f4db0e 65 print_encoded_string(_client, feedId);
jb8414 0:f479e4f4db0e 66 _client->println(" HTTP/1.0");
jb8414 0:f479e4f4db0e 67 writeHttpHeader(length);
jb8414 0:f479e4f4db0e 68 write_multiple_values(_client, streamNum, names, counts, ats, values);
jb8414 0:f479e4f4db0e 69 } else {
jb8414 0:f479e4f4db0e 70 DBGLN("%s", "ERROR: Cannot connect to M2X server!");
jb8414 0:f479e4f4db0e 71 return E_NOCONNECTION;
jb8414 0:f479e4f4db0e 72 }
jb8414 0:f479e4f4db0e 73 return readStatusCode(true);
jb8414 0:f479e4f4db0e 74 }
jb8414 0:f479e4f4db0e 75
jb8414 0:f479e4f4db0e 76 template <class T>
jb8414 0:f479e4f4db0e 77 static int write_location_data(Print* print, const char* name,
jb8414 0:f479e4f4db0e 78 T latitude, T longitude,
jb8414 0:f479e4f4db0e 79 T elevation) {
jb8414 0:f479e4f4db0e 80 int bytes = 0;
jb8414 0:f479e4f4db0e 81 bytes += print->print("{\"name\":\"");
jb8414 0:f479e4f4db0e 82 bytes += print->print(name);
jb8414 0:f479e4f4db0e 83 bytes += print->print("\",\"latitude\":\"");
jb8414 0:f479e4f4db0e 84 bytes += print->print(latitude);
jb8414 0:f479e4f4db0e 85 bytes += print->print("\",\"longitude\":\"");
jb8414 0:f479e4f4db0e 86 bytes += print->print(longitude);
jb8414 0:f479e4f4db0e 87 bytes += print->print("\",\"elevation\":\"");
jb8414 0:f479e4f4db0e 88 bytes += print->print(elevation);
jb8414 0:f479e4f4db0e 89 bytes += print->print("\"}");
jb8414 0:f479e4f4db0e 90 return bytes;
jb8414 0:f479e4f4db0e 91 }
jb8414 0:f479e4f4db0e 92
jb8414 0:f479e4f4db0e 93 static int write_location_data(Print* print, const char* name,
jb8414 0:f479e4f4db0e 94 double latitude, double longitude,
jb8414 0:f479e4f4db0e 95 double elevation) {
jb8414 0:f479e4f4db0e 96 int bytes = 0;
jb8414 0:f479e4f4db0e 97 bytes += print->print("{\"name\":\"");
jb8414 0:f479e4f4db0e 98 bytes += print->print(name);
jb8414 0:f479e4f4db0e 99 bytes += print->print("\",\"latitude\":\"");
jb8414 0:f479e4f4db0e 100 bytes += print->print(latitude, MAX_DOUBLE_DIGITS);
jb8414 0:f479e4f4db0e 101 bytes += print->print("\",\"longitude\":\"");
jb8414 0:f479e4f4db0e 102 bytes += print->print(longitude, MAX_DOUBLE_DIGITS);
jb8414 0:f479e4f4db0e 103 bytes += print->print("\",\"elevation\":\"");
jb8414 0:f479e4f4db0e 104 bytes += print->print(elevation);
jb8414 0:f479e4f4db0e 105 bytes += print->print("\"}");
jb8414 0:f479e4f4db0e 106 return bytes;
jb8414 0:f479e4f4db0e 107 }
jb8414 0:f479e4f4db0e 108
jb8414 0:f479e4f4db0e 109 template <class T>
jb8414 0:f479e4f4db0e 110 int M2XStreamClient::updateLocation(const char* feedId,
jb8414 0:f479e4f4db0e 111 const char* name,
jb8414 0:f479e4f4db0e 112 T latitude,
jb8414 0:f479e4f4db0e 113 T longitude,
jb8414 0:f479e4f4db0e 114 T elevation) {
jb8414 0:f479e4f4db0e 115 if (_client->connect(_host, _port)) {
jb8414 0:f479e4f4db0e 116 DBGLN("%s", "Connected to M2X server!");
jb8414 0:f479e4f4db0e 117
jb8414 0:f479e4f4db0e 118 int length = write_location_data(&_null_print, name, latitude, longitude,
jb8414 0:f479e4f4db0e 119 elevation);
jb8414 0:f479e4f4db0e 120 _client->print("PUT /v1/feeds/");
jb8414 0:f479e4f4db0e 121 print_encoded_string(_client, feedId);
jb8414 0:f479e4f4db0e 122 _client->println("/location HTTP/1.0");
jb8414 0:f479e4f4db0e 123
jb8414 0:f479e4f4db0e 124 writeHttpHeader(length);
jb8414 0:f479e4f4db0e 125 write_location_data(_client, name, latitude, longitude, elevation);
jb8414 0:f479e4f4db0e 126 } else {
jb8414 0:f479e4f4db0e 127 DBGLN("%s", "ERROR: Cannot connect to M2X server!");
jb8414 0:f479e4f4db0e 128 return E_NOCONNECTION;
jb8414 0:f479e4f4db0e 129 }
jb8414 0:f479e4f4db0e 130 return readStatusCode(true);
jb8414 0:f479e4f4db0e 131 }
jb8414 0:f479e4f4db0e 132
jb8414 0:f479e4f4db0e 133 #endif