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.
Fork of M2XStreamClient by
M2XStreamClient_template.h@10:4ce9eba38dbe, 2014-09-10 (annotated)
- Committer:
- citrusbyte
- Date:
- Wed Sep 10 13:07:34 2014 +0000
- Revision:
- 10:4ce9eba38dbe
- Parent:
- 0:f479e4f4db0e
- Child:
- 13:0d574742208f
Sync changes with github repo
Who changed what in which revision?
| User | Revision | Line number | New 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> |
| citrusbyte | 10:4ce9eba38dbe | 9 | int M2XStreamClient::put(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!"); |
| citrusbyte | 10:4ce9eba38dbe | 12 | writePutHeader(feedId, streamName, |
| citrusbyte | 10:4ce9eba38dbe | 13 | // for {"value": and } |
| citrusbyte | 10:4ce9eba38dbe | 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++) { |
| citrusbyte | 10:4ce9eba38dbe | 37 | bytes += print->print("{\"at\": \""); |
| citrusbyte | 10:4ce9eba38dbe | 38 | bytes += print->print(ats[value_index]); |
| citrusbyte | 10:4ce9eba38dbe | 39 | bytes += print->print("\", \"value\": \""); |
| jb8414 | 0:f479e4f4db0e | 40 | bytes += print->print(values[value_index]); |
| jb8414 | 0:f479e4f4db0e | 41 | bytes += print->print("\"}"); |
| jb8414 | 0:f479e4f4db0e | 42 | if (j < counts[i] - 1) { bytes += print->print(","); } |
| jb8414 | 0:f479e4f4db0e | 43 | value_index++; |
| jb8414 | 0:f479e4f4db0e | 44 | } |
| jb8414 | 0:f479e4f4db0e | 45 | bytes += print->print("]"); |
| jb8414 | 0:f479e4f4db0e | 46 | if (i < streamNum - 1) { bytes += print->print(","); } |
| jb8414 | 0:f479e4f4db0e | 47 | } |
| jb8414 | 0:f479e4f4db0e | 48 | bytes += print->print("}}"); |
| jb8414 | 0:f479e4f4db0e | 49 | return bytes; |
| jb8414 | 0:f479e4f4db0e | 50 | } |
| jb8414 | 0:f479e4f4db0e | 51 | |
| jb8414 | 0:f479e4f4db0e | 52 | template <class T> |
| jb8414 | 0:f479e4f4db0e | 53 | int M2XStreamClient::postMultiple(const char* feedId, int streamNum, |
| jb8414 | 0:f479e4f4db0e | 54 | const char* names[], const int counts[], |
| jb8414 | 0:f479e4f4db0e | 55 | const char* ats[], T values[]) { |
| jb8414 | 0:f479e4f4db0e | 56 | if (_client->connect(_host, _port)) { |
| jb8414 | 0:f479e4f4db0e | 57 | DBGLN("%s", "Connected to M2X server!"); |
| jb8414 | 0:f479e4f4db0e | 58 | int length = write_multiple_values(&_null_print, streamNum, names, |
| jb8414 | 0:f479e4f4db0e | 59 | counts, ats, values); |
| jb8414 | 0:f479e4f4db0e | 60 | _client->print("POST /v1/feeds/"); |
| jb8414 | 0:f479e4f4db0e | 61 | print_encoded_string(_client, feedId); |
| jb8414 | 0:f479e4f4db0e | 62 | _client->println(" HTTP/1.0"); |
| jb8414 | 0:f479e4f4db0e | 63 | writeHttpHeader(length); |
| jb8414 | 0:f479e4f4db0e | 64 | write_multiple_values(_client, streamNum, names, counts, ats, values); |
| jb8414 | 0:f479e4f4db0e | 65 | } else { |
| jb8414 | 0:f479e4f4db0e | 66 | DBGLN("%s", "ERROR: Cannot connect to M2X server!"); |
| jb8414 | 0:f479e4f4db0e | 67 | return E_NOCONNECTION; |
| jb8414 | 0:f479e4f4db0e | 68 | } |
| jb8414 | 0:f479e4f4db0e | 69 | return readStatusCode(true); |
| jb8414 | 0:f479e4f4db0e | 70 | } |
| jb8414 | 0:f479e4f4db0e | 71 | |
| jb8414 | 0:f479e4f4db0e | 72 | template <class T> |
| jb8414 | 0:f479e4f4db0e | 73 | static int write_location_data(Print* print, const char* name, |
| jb8414 | 0:f479e4f4db0e | 74 | T latitude, T longitude, |
| jb8414 | 0:f479e4f4db0e | 75 | T elevation) { |
| jb8414 | 0:f479e4f4db0e | 76 | int bytes = 0; |
| jb8414 | 0:f479e4f4db0e | 77 | bytes += print->print("{\"name\":\""); |
| jb8414 | 0:f479e4f4db0e | 78 | bytes += print->print(name); |
| jb8414 | 0:f479e4f4db0e | 79 | bytes += print->print("\",\"latitude\":\""); |
| jb8414 | 0:f479e4f4db0e | 80 | bytes += print->print(latitude); |
| jb8414 | 0:f479e4f4db0e | 81 | bytes += print->print("\",\"longitude\":\""); |
| jb8414 | 0:f479e4f4db0e | 82 | bytes += print->print(longitude); |
| jb8414 | 0:f479e4f4db0e | 83 | bytes += print->print("\",\"elevation\":\""); |
| jb8414 | 0:f479e4f4db0e | 84 | bytes += print->print(elevation); |
| jb8414 | 0:f479e4f4db0e | 85 | bytes += print->print("\"}"); |
| jb8414 | 0:f479e4f4db0e | 86 | return bytes; |
| jb8414 | 0:f479e4f4db0e | 87 | } |
| jb8414 | 0:f479e4f4db0e | 88 | |
| jb8414 | 0:f479e4f4db0e | 89 | static int write_location_data(Print* print, const char* name, |
| jb8414 | 0:f479e4f4db0e | 90 | double latitude, double longitude, |
| jb8414 | 0:f479e4f4db0e | 91 | double elevation) { |
| jb8414 | 0:f479e4f4db0e | 92 | int bytes = 0; |
| jb8414 | 0:f479e4f4db0e | 93 | bytes += print->print("{\"name\":\""); |
| jb8414 | 0:f479e4f4db0e | 94 | bytes += print->print(name); |
| jb8414 | 0:f479e4f4db0e | 95 | bytes += print->print("\",\"latitude\":\""); |
| jb8414 | 0:f479e4f4db0e | 96 | bytes += print->print(latitude, MAX_DOUBLE_DIGITS); |
| jb8414 | 0:f479e4f4db0e | 97 | bytes += print->print("\",\"longitude\":\""); |
| jb8414 | 0:f479e4f4db0e | 98 | bytes += print->print(longitude, MAX_DOUBLE_DIGITS); |
| jb8414 | 0:f479e4f4db0e | 99 | bytes += print->print("\",\"elevation\":\""); |
| jb8414 | 0:f479e4f4db0e | 100 | bytes += print->print(elevation); |
| jb8414 | 0:f479e4f4db0e | 101 | bytes += print->print("\"}"); |
| jb8414 | 0:f479e4f4db0e | 102 | return bytes; |
| jb8414 | 0:f479e4f4db0e | 103 | } |
| jb8414 | 0:f479e4f4db0e | 104 | |
| jb8414 | 0:f479e4f4db0e | 105 | template <class T> |
| jb8414 | 0:f479e4f4db0e | 106 | int M2XStreamClient::updateLocation(const char* feedId, |
| jb8414 | 0:f479e4f4db0e | 107 | const char* name, |
| jb8414 | 0:f479e4f4db0e | 108 | T latitude, |
| jb8414 | 0:f479e4f4db0e | 109 | T longitude, |
| jb8414 | 0:f479e4f4db0e | 110 | T elevation) { |
| jb8414 | 0:f479e4f4db0e | 111 | if (_client->connect(_host, _port)) { |
| jb8414 | 0:f479e4f4db0e | 112 | DBGLN("%s", "Connected to M2X server!"); |
| jb8414 | 0:f479e4f4db0e | 113 | |
| jb8414 | 0:f479e4f4db0e | 114 | int length = write_location_data(&_null_print, name, latitude, longitude, |
| jb8414 | 0:f479e4f4db0e | 115 | elevation); |
| jb8414 | 0:f479e4f4db0e | 116 | _client->print("PUT /v1/feeds/"); |
| jb8414 | 0:f479e4f4db0e | 117 | print_encoded_string(_client, feedId); |
| jb8414 | 0:f479e4f4db0e | 118 | _client->println("/location HTTP/1.0"); |
| jb8414 | 0:f479e4f4db0e | 119 | |
| jb8414 | 0:f479e4f4db0e | 120 | writeHttpHeader(length); |
| jb8414 | 0:f479e4f4db0e | 121 | write_location_data(_client, name, latitude, longitude, elevation); |
| jb8414 | 0:f479e4f4db0e | 122 | } else { |
| jb8414 | 0:f479e4f4db0e | 123 | DBGLN("%s", "ERROR: Cannot connect to M2X server!"); |
| jb8414 | 0:f479e4f4db0e | 124 | return E_NOCONNECTION; |
| jb8414 | 0:f479e4f4db0e | 125 | } |
| jb8414 | 0:f479e4f4db0e | 126 | return readStatusCode(true); |
| jb8414 | 0:f479e4f4db0e | 127 | } |
| jb8414 | 0:f479e4f4db0e | 128 | |
| jb8414 | 0:f479e4f4db0e | 129 | #endif |
