gusimplewhiteboard
wb_temperature_sensors.c
Go to the documentation of this file.
1/*
2 * file wb_temperature_sensors.c
3 *
4 * This file was generated by classgenerator from temperature_sensors.gen.
5 * DO NOT CHANGE MANUALLY!
6 *
7 * Copyright © 2021 Morgan McColl. All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above
17 * copyright notice, this list of conditions and the following
18 * disclaimer in the documentation and/or other materials
19 * provided with the distribution.
20 *
21 * 3. All advertising materials mentioning features or use of this
22 * software must display the following acknowledgement:
23 *
24 * This product includes software developed by Morgan McColl.
25 *
26 * 4. Neither the name of the author nor the names of contributors
27 * may be used to endorse or promote products derived from this
28 * software without specific prior written permission.
29 *
30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
34 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
35 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
36 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
37 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
38 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
39 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
40 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41 *
42 * -----------------------------------------------------------------------
43 * This program is free software; you can redistribute it and/or
44 * modify it under the above terms or under the terms of the GNU
45 * General Public License as published by the Free Software Foundation;
46 * either version 2 of the License, or (at your option) any later version.
47 *
48 * This program is distributed in the hope that it will be useful,
49 * but WITHOUT ANY WARRANTY; without even the implied warranty of
50 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
51 * GNU General Public License for more details.
52 *
53 * You should have received a copy of the GNU General Public License
54 * along with this program; if not, see http://www.gnu.org/licenses/
55 * or write to the Free Software Foundation, Inc., 51 Franklin Street,
56 * Fifth Floor, Boston, MA 02110-1301, USA.
57 *
58 */
59
60#ifndef WHITEBOARD_POSTER_STRING_CONVERSION
61#define WHITEBOARD_POSTER_STRING_CONVERSION
62#endif // WHITEBOARD_POSTER_STRING_CONVERSION
63
65#include <stdio.h>
66#include <string.h>
67#include <stdlib.h>
68#include <ctype.h>
69#include <limits.h>
70
71/* Network byte order functions */
72#pragma clang diagnostic push
73#pragma clang diagnostic ignored "-Wunused-macros"
74#if defined(__linux)
75# include <endian.h>
76# include <byteswap.h>
77#elif defined(__APPLE__)
78# include <machine/endian.h> //Needed for __BYTE_ORDER
79# include <architecture/byte_order.h> //Needed for byte swap functions
80# define bswap_16(x) NXSwapShort(x)
81# define bswap_32(x) NXSwapInt(x)
82# define bswap_64(x) NXSwapLongLong(x)
83#elif defined(ESP8266)
84# define bswap_16(x) __builtin_bswap16(x)
85# define bswap_32(x) __builtin_bswap32(x)
86# define bswap_64(x) __builtin_bswap64(x)
87#else
88 //Manually define swap macros?
89#endif
90
91#if (!defined(__BYTE_ORDER) && !defined(__LITTLE_ENDIAN)) || (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && __BYTE_ORDER == __LITTLE_ENDIAN)
92# if !defined(htonll) && !defined(ntohll)
93# define htonll(x) bswap_64(x)
94# define ntohll(x) bswap_64(x)
95# endif
96# if !defined(htonl) && !defined(ntohl)
97# define htonl(x) bswap_32(x)
98# define ntohl(x) bswap_32(x)
99# endif
100# if !defined(htons) && !defined(ntohs)
101# define htons(x) bswap_16(x)
102# define ntohs(x) bswap_16(x)
103# endif
104#else
105# if !defined(htonll) && !defined(ntohll)
106# define htonll(x) (x)
107# define ntohll(x) (x)
108# endif
109# if !defined(htonl) && !defined(ntohl)
110# define htonl(x) (x)
111# define ntohl(x) (x)
112# endif
113# if !defined(htons) && !defined(ntohs)
114# define htons(x) (x)
115# define ntohs(x) (x)
116# endif
117#endif
118#pragma clang diagnostic pop
119
120
121
125const char* wb_temperature_sensors_description(const struct wb_temperature_sensors* self, char* descString, size_t bufferSize)
126{
127#pragma clang diagnostic push
128#pragma clang diagnostic ignored "-Wunused-variable"
129 size_t len = 0;
130 if (len >= bufferSize) {
131 return descString;
132 }
133 len = gu_strlcat(descString, self->LKneePitch ? "LKneePitch=true" : "LKneePitch=false", bufferSize);
134 if (len >= bufferSize) {
135 return descString;
136 }
137 len = gu_strlcat(descString, ", ", bufferSize);
138 if (len >= bufferSize) {
139 return descString;
140 }
141 len = gu_strlcat(descString, self->LAnklePitch ? "LAnklePitch=true" : "LAnklePitch=false", bufferSize);
142 if (len >= bufferSize) {
143 return descString;
144 }
145 len = gu_strlcat(descString, ", ", bufferSize);
146 if (len >= bufferSize) {
147 return descString;
148 }
149 len = gu_strlcat(descString, self->LAnkleRoll ? "LAnkleRoll=true" : "LAnkleRoll=false", bufferSize);
150 if (len >= bufferSize) {
151 return descString;
152 }
153 len = gu_strlcat(descString, ", ", bufferSize);
154 if (len >= bufferSize) {
155 return descString;
156 }
157 len = gu_strlcat(descString, self->RKneePitch ? "RKneePitch=true" : "RKneePitch=false", bufferSize);
158 if (len >= bufferSize) {
159 return descString;
160 }
161 len = gu_strlcat(descString, ", ", bufferSize);
162 if (len >= bufferSize) {
163 return descString;
164 }
165 len = gu_strlcat(descString, self->RAnklePitch ? "RAnklePitch=true" : "RAnklePitch=false", bufferSize);
166 if (len >= bufferSize) {
167 return descString;
168 }
169 len = gu_strlcat(descString, ", ", bufferSize);
170 if (len >= bufferSize) {
171 return descString;
172 }
173 len = gu_strlcat(descString, self->RAnkleRoll ? "RAnkleRoll=true" : "RAnkleRoll=false", bufferSize);
174 return descString;
175#pragma clang diagnostic pop
176}
177
181const char* wb_temperature_sensors_to_string(const struct wb_temperature_sensors* self, char* toString, size_t bufferSize)
182{
183#pragma clang diagnostic push
184#pragma clang diagnostic ignored "-Wunused-variable"
185 size_t len = 0;
186 if (len >= bufferSize) {
187 return toString;
188 }
189 len = gu_strlcat(toString, self->LKneePitch ? "true" : "false", bufferSize);
190 if (len >= bufferSize) {
191 return toString;
192 }
193 len = gu_strlcat(toString, ", ", bufferSize);
194 if (len >= bufferSize) {
195 return toString;
196 }
197 len = gu_strlcat(toString, self->LAnklePitch ? "true" : "false", bufferSize);
198 if (len >= bufferSize) {
199 return toString;
200 }
201 len = gu_strlcat(toString, ", ", bufferSize);
202 if (len >= bufferSize) {
203 return toString;
204 }
205 len = gu_strlcat(toString, self->LAnkleRoll ? "true" : "false", bufferSize);
206 if (len >= bufferSize) {
207 return toString;
208 }
209 len = gu_strlcat(toString, ", ", bufferSize);
210 if (len >= bufferSize) {
211 return toString;
212 }
213 len = gu_strlcat(toString, self->RKneePitch ? "true" : "false", bufferSize);
214 if (len >= bufferSize) {
215 return toString;
216 }
217 len = gu_strlcat(toString, ", ", bufferSize);
218 if (len >= bufferSize) {
219 return toString;
220 }
221 len = gu_strlcat(toString, self->RAnklePitch ? "true" : "false", bufferSize);
222 if (len >= bufferSize) {
223 return toString;
224 }
225 len = gu_strlcat(toString, ", ", bufferSize);
226 if (len >= bufferSize) {
227 return toString;
228 }
229 len = gu_strlcat(toString, self->RAnkleRoll ? "true" : "false", bufferSize);
230 return toString;
231#pragma clang diagnostic pop
232}
233
238{
239 size_t temp_length = strlen(str);
240 int length = (temp_length <= INT_MAX) ? ((int)((ssize_t)temp_length)) : -1;
241 if (length < 1 || length > TEMPERATURE_SENSORS_DESC_BUFFER_SIZE) {
242 return self;
243 }
244 char var_str_buffer[TEMPERATURE_SENSORS_DESC_BUFFER_SIZE + 1];
245 char* var_str = &var_str_buffer[0];
246 char key_buffer[12];
247 char* key = &key_buffer[0];
248 int bracecount = 0;
249 int startVar = 0;
250 int index = 0;
251 int startKey = 0;
252 int endKey = -1;
253 int varIndex = 0;
254 if (index == 0 && str[0] == '{') {
255 index = 1;
256 }
257 startVar = index;
258 startKey = startVar;
259 do {
260 for (int i = index; i < length; i++) {
261 index = i + 1;
262 if (bracecount == 0 && str[i] == '=') {
263 endKey = i - 1;
264 startVar = index;
265 continue;
266 }
267 if (bracecount == 0 && isspace(str[i])) {
268 startVar = index;
269 if (endKey == -1) {
270 startKey = index;
271 }
272 continue;
273 }
274 if (bracecount == 0 && str[i] == ',') {
275 index = i - 1;
276 break;
277 }
278 if (str[i] == '{') {
279 bracecount++;
280 continue;
281 }
282 if (str[i] == '}') {
283 bracecount--;
284 if (bracecount < 0) {
285 index = i - 1;
286 break;
287 }
288 }
289 if (i == length - 1) {
290 index = i;
291 }
292 }
293 if (endKey >= startKey && endKey - startKey < length) {
294 strncpy(key, str + startKey, ((size_t)(endKey - startKey) + 1));
295 key[(endKey - startKey) + 1] = 0;
296 } else {
297 key[0] = 0;
298 }
299 strncpy(var_str, str + startVar, ((size_t)(index - startVar) + 1));
300 var_str[(index - startVar) + 1] = 0;
301 bracecount = 0;
302 index += 2;
303 startVar = index;
304 startKey = startVar;
305 endKey = -1;
306 if (strlen(key) > 0) {
307 if (0 == strcmp("LKneePitch", key)) {
308 varIndex = 0;
309 } else if (0 == strcmp("LAnklePitch", key)) {
310 varIndex = 1;
311 } else if (0 == strcmp("LAnkleRoll", key)) {
312 varIndex = 2;
313 } else if (0 == strcmp("RKneePitch", key)) {
314 varIndex = 3;
315 } else if (0 == strcmp("RAnklePitch", key)) {
316 varIndex = 4;
317 } else if (0 == strcmp("RAnkleRoll", key)) {
318 varIndex = 5;
319 } else {
320 varIndex = -1;
321 }
322 }
323 switch (varIndex) {
324 case -1: { break; }
325 case 0:
326 {
327 self->LKneePitch = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
328 break;
329 }
330 case 1:
331 {
332 self->LAnklePitch = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
333 break;
334 }
335 case 2:
336 {
337 self->LAnkleRoll = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
338 break;
339 }
340 case 3:
341 {
342 self->RKneePitch = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
343 break;
344 }
345 case 4:
346 {
347 self->RAnklePitch = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
348 break;
349 }
350 case 5:
351 {
352 self->RAnkleRoll = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
353 break;
354 }
355 }
356 if (varIndex >= 0) {
357 varIndex++;
358 }
359 } while(index < length);
360 return self;
361}
362
363/*#ifdef WHITEBOARD_SERIALISATION*/
364
369{
370 uint16_t bit_offset = 0;
371 do {
372 uint16_t byte = bit_offset / 8;
373 uint16_t bit = 7 - (bit_offset % 8);
374 unsigned long newbit = !!(self->LKneePitch ? 1U : 0U);
375 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
376 bit_offset = bit_offset + 1;
377 } while(false);
378
379 do {
380 uint16_t byte = bit_offset / 8;
381 uint16_t bit = 7 - (bit_offset % 8);
382 unsigned long newbit = !!(self->LAnklePitch ? 1U : 0U);
383 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
384 bit_offset = bit_offset + 1;
385 } while(false);
386
387 do {
388 uint16_t byte = bit_offset / 8;
389 uint16_t bit = 7 - (bit_offset % 8);
390 unsigned long newbit = !!(self->LAnkleRoll ? 1U : 0U);
391 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
392 bit_offset = bit_offset + 1;
393 } while(false);
394
395 do {
396 uint16_t byte = bit_offset / 8;
397 uint16_t bit = 7 - (bit_offset % 8);
398 unsigned long newbit = !!(self->RKneePitch ? 1U : 0U);
399 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
400 bit_offset = bit_offset + 1;
401 } while(false);
402
403 do {
404 uint16_t byte = bit_offset / 8;
405 uint16_t bit = 7 - (bit_offset % 8);
406 unsigned long newbit = !!(self->RAnklePitch ? 1U : 0U);
407 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
408 bit_offset = bit_offset + 1;
409 } while(false);
410
411 do {
412 uint16_t byte = bit_offset / 8;
413 uint16_t bit = 7 - (bit_offset % 8);
414 unsigned long newbit = !!(self->RAnkleRoll ? 1U : 0U);
415 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
416 bit_offset = bit_offset + 1;
417 } while(false);
418 //avoid unused variable warnings when you try to use an empty gen file or a gen file with no supported serialisation types.
419 (void)self;
420 (void)dst;
421 return bit_offset;
422}
423
428{
429 uint16_t bit_offset = 0;
430 do {
431 uint16_t byte = bit_offset / 8;
432 uint16_t bit = 7 - (bit_offset % 8);
433 char dataByte = src[byte];
434 unsigned char bitValue = (dataByte >> bit) & 1U;
435 dst->LKneePitch = bitValue != 0;
436 bit_offset = bit_offset + 1;
437 } while(false);
438
439 do {
440 uint16_t byte = bit_offset / 8;
441 uint16_t bit = 7 - (bit_offset % 8);
442 char dataByte = src[byte];
443 unsigned char bitValue = (dataByte >> bit) & 1U;
444 dst->LAnklePitch = bitValue != 0;
445 bit_offset = bit_offset + 1;
446 } while(false);
447
448 do {
449 uint16_t byte = bit_offset / 8;
450 uint16_t bit = 7 - (bit_offset % 8);
451 char dataByte = src[byte];
452 unsigned char bitValue = (dataByte >> bit) & 1U;
453 dst->LAnkleRoll = bitValue != 0;
454 bit_offset = bit_offset + 1;
455 } while(false);
456
457 do {
458 uint16_t byte = bit_offset / 8;
459 uint16_t bit = 7 - (bit_offset % 8);
460 char dataByte = src[byte];
461 unsigned char bitValue = (dataByte >> bit) & 1U;
462 dst->RKneePitch = bitValue != 0;
463 bit_offset = bit_offset + 1;
464 } while(false);
465
466 do {
467 uint16_t byte = bit_offset / 8;
468 uint16_t bit = 7 - (bit_offset % 8);
469 char dataByte = src[byte];
470 unsigned char bitValue = (dataByte >> bit) & 1U;
471 dst->RAnklePitch = bitValue != 0;
472 bit_offset = bit_offset + 1;
473 } while(false);
474
475 do {
476 uint16_t byte = bit_offset / 8;
477 uint16_t bit = 7 - (bit_offset % 8);
478 char dataByte = src[byte];
479 unsigned char bitValue = (dataByte >> bit) & 1U;
480 dst->RAnkleRoll = bitValue != 0;
481 bit_offset = bit_offset + 1;
482 } while(false);
483 //avoid unused variable warnings when you try to use an empty gen file or a gen file with no supported serialisation types.
484 (void)src;
485 (void)dst;
486 return bit_offset;
487}
488
489/*#endif // WHITEBOARD_SERIALISATION*/
WHITEBOARD_POSTER_STRING_CONVERSION.
bool RAnkleRoll
Is the right ankle roll overheating.
bool LAnklePitch
Is the left ankle pitch overheating.
bool LAnkleRoll
Is the left ankle roll overheating.
bool LKneePitch
Is the left knee pitch overheating.
bool RKneePitch
Is the right knee pitch overheating.
bool RAnklePitch
Is the right ankle pitch overheating.
size_t wb_temperature_sensors_from_network_serialised(const char *src, struct wb_temperature_sensors *dst)
Convert from a compressed, serialised, network byte order byte stream.
size_t wb_temperature_sensors_to_network_serialised(const struct wb_temperature_sensors *self, char *dst)
Convert to a compressed, serialised, network byte order byte stream.
const char * wb_temperature_sensors_to_string(const struct wb_temperature_sensors *self, char *toString, size_t bufferSize)
Convert to a string.
struct wb_temperature_sensors * wb_temperature_sensors_from_string(struct wb_temperature_sensors *self, const char *str)
Convert from a string.
const char * wb_temperature_sensors_description(const struct wb_temperature_sensors *self, char *descString, size_t bufferSize)
Convert to a description string.
#define TEMPERATURE_SENSORS_DESC_BUFFER_SIZE