60#ifndef WHITEBOARD_POSTER_STRING_CONVERSION
61#define WHITEBOARD_POSTER_STRING_CONVERSION
72#pragma clang diagnostic push
73#pragma clang diagnostic ignored "-Wunused-macros"
77#elif defined(__APPLE__)
78# include <machine/endian.h>
79# include <architecture/byte_order.h>
80# define bswap_16(x) NXSwapShort(x)
81# define bswap_32(x) NXSwapInt(x)
82# define bswap_64(x) NXSwapLongLong(x)
84# define bswap_16(x) __builtin_bswap16(x)
85# define bswap_32(x) __builtin_bswap32(x)
86# define bswap_64(x) __builtin_bswap64(x)
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)
96# if !defined(htonl) && !defined(ntohl)
97# define htonl(x) bswap_32(x)
98# define ntohl(x) bswap_32(x)
100# if !defined(htons) && !defined(ntohs)
101# define htons(x) bswap_16(x)
102# define ntohs(x) bswap_16(x)
105# if !defined(htonll) && !defined(ntohll)
106# define htonll(x) (x)
107# define ntohll(x) (x)
109# if !defined(htonl) && !defined(ntohl)
113# if !defined(htons) && !defined(ntohs)
118#pragma clang diagnostic pop
127#pragma clang diagnostic push
128#pragma clang diagnostic ignored "-Wunused-variable"
130 if (len >= bufferSize) {
133 len += snprintf(descString + len, bufferSize - len,
"DCM_Time=%d", self->DCM_Time);
134 if (len >= bufferSize) {
137 len = gu_strlcat(descString,
", ", bufferSize);
138 if (len >= bufferSize) {
141 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AccX=%lf", (
double) self->InertialSensor_AccX);
142 if (len >= bufferSize) {
145 len = gu_strlcat(descString,
", ", bufferSize);
146 if (len >= bufferSize) {
149 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AccY=%lf", (
double) self->InertialSensor_AccY);
150 if (len >= bufferSize) {
153 len = gu_strlcat(descString,
", ", bufferSize);
154 if (len >= bufferSize) {
157 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AccZ=%lf", (
double) self->InertialSensor_AccZ);
158 if (len >= bufferSize) {
161 len = gu_strlcat(descString,
", ", bufferSize);
162 if (len >= bufferSize) {
165 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_GyrX=%lf", (
double) self->InertialSensor_GyrX);
166 if (len >= bufferSize) {
169 len = gu_strlcat(descString,
", ", bufferSize);
170 if (len >= bufferSize) {
173 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_GyrY=%lf", (
double) self->InertialSensor_GyrY);
174 if (len >= bufferSize) {
177 len = gu_strlcat(descString,
", ", bufferSize);
178 if (len >= bufferSize) {
181 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_GyrZ=%lf", (
double) self->InertialSensor_GyrZ);
182 if (len >= bufferSize) {
185 len = gu_strlcat(descString,
", ", bufferSize);
186 if (len >= bufferSize) {
189 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AngleX=%lf", (
double) self->InertialSensor_AngleX);
190 if (len >= bufferSize) {
193 len = gu_strlcat(descString,
", ", bufferSize);
194 if (len >= bufferSize) {
197 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AngleY=%lf", (
double) self->InertialSensor_AngleY);
198 if (len >= bufferSize) {
201 len = gu_strlcat(descString,
", ", bufferSize);
202 if (len >= bufferSize) {
205 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AngleZ=%lf", (
double) self->InertialSensor_AngleZ);
206 if (len >= bufferSize) {
209 len = gu_strlcat(descString,
", ", bufferSize);
210 if (len >= bufferSize) {
213 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AccelerometerX=%lf", (
double) self->InertialSensor_AccelerometerX);
214 if (len >= bufferSize) {
217 len = gu_strlcat(descString,
", ", bufferSize);
218 if (len >= bufferSize) {
221 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AccelerometerY=%lf", (
double) self->InertialSensor_AccelerometerY);
222 if (len >= bufferSize) {
225 len = gu_strlcat(descString,
", ", bufferSize);
226 if (len >= bufferSize) {
229 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_AccelerometerZ=%lf", (
double) self->InertialSensor_AccelerometerZ);
230 if (len >= bufferSize) {
233 len = gu_strlcat(descString,
", ", bufferSize);
234 if (len >= bufferSize) {
237 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_GyroscopeX=%lf", (
double) self->InertialSensor_GyroscopeX);
238 if (len >= bufferSize) {
241 len = gu_strlcat(descString,
", ", bufferSize);
242 if (len >= bufferSize) {
245 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_GyroscopeY=%lf", (
double) self->InertialSensor_GyroscopeY);
246 if (len >= bufferSize) {
249 len = gu_strlcat(descString,
", ", bufferSize);
250 if (len >= bufferSize) {
253 len += snprintf(descString + len, bufferSize - len,
"InertialSensor_GyroscopeZ=%lf", (
double) self->InertialSensor_GyroscopeZ);
254 if (len >= bufferSize) {
257 len = gu_strlcat(descString,
", ", bufferSize);
258 if (len >= bufferSize) {
261 len += snprintf(descString + len, bufferSize - len,
"Battery_Charge=%u", self->Battery_Charge);
262 if (len >= bufferSize) {
265 len = gu_strlcat(descString,
", ", bufferSize);
266 if (len >= bufferSize) {
269 len += snprintf(descString + len, bufferSize - len,
"Battery_Current=%u", self->Battery_Current);
270 if (len >= bufferSize) {
273 len = gu_strlcat(descString,
", ", bufferSize);
274 if (len >= bufferSize) {
277 len += snprintf(descString + len, bufferSize - len,
"US=%lf", (
double) self->US);
278 if (len >= bufferSize) {
281 len = gu_strlcat(descString,
", ", bufferSize);
282 if (len >= bufferSize) {
285 len = gu_strlcat(descString, self->ChestBoard_Button ?
"ChestBoard_Button=true" :
"ChestBoard_Button=false", bufferSize);
287#pragma clang diagnostic pop
295#pragma clang diagnostic push
296#pragma clang diagnostic ignored "-Wunused-variable"
298 if (len >= bufferSize) {
301 len += snprintf(toString + len, bufferSize - len,
"%d", self->DCM_Time);
302 if (len >= bufferSize) {
305 len = gu_strlcat(toString,
", ", bufferSize);
306 if (len >= bufferSize) {
309 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AccX);
310 if (len >= bufferSize) {
313 len = gu_strlcat(toString,
", ", bufferSize);
314 if (len >= bufferSize) {
317 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AccY);
318 if (len >= bufferSize) {
321 len = gu_strlcat(toString,
", ", bufferSize);
322 if (len >= bufferSize) {
325 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AccZ);
326 if (len >= bufferSize) {
329 len = gu_strlcat(toString,
", ", bufferSize);
330 if (len >= bufferSize) {
333 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_GyrX);
334 if (len >= bufferSize) {
337 len = gu_strlcat(toString,
", ", bufferSize);
338 if (len >= bufferSize) {
341 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_GyrY);
342 if (len >= bufferSize) {
345 len = gu_strlcat(toString,
", ", bufferSize);
346 if (len >= bufferSize) {
349 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_GyrZ);
350 if (len >= bufferSize) {
353 len = gu_strlcat(toString,
", ", bufferSize);
354 if (len >= bufferSize) {
357 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AngleX);
358 if (len >= bufferSize) {
361 len = gu_strlcat(toString,
", ", bufferSize);
362 if (len >= bufferSize) {
365 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AngleY);
366 if (len >= bufferSize) {
369 len = gu_strlcat(toString,
", ", bufferSize);
370 if (len >= bufferSize) {
373 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AngleZ);
374 if (len >= bufferSize) {
377 len = gu_strlcat(toString,
", ", bufferSize);
378 if (len >= bufferSize) {
381 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AccelerometerX);
382 if (len >= bufferSize) {
385 len = gu_strlcat(toString,
", ", bufferSize);
386 if (len >= bufferSize) {
389 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AccelerometerY);
390 if (len >= bufferSize) {
393 len = gu_strlcat(toString,
", ", bufferSize);
394 if (len >= bufferSize) {
397 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_AccelerometerZ);
398 if (len >= bufferSize) {
401 len = gu_strlcat(toString,
", ", bufferSize);
402 if (len >= bufferSize) {
405 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_GyroscopeX);
406 if (len >= bufferSize) {
409 len = gu_strlcat(toString,
", ", bufferSize);
410 if (len >= bufferSize) {
413 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_GyroscopeY);
414 if (len >= bufferSize) {
417 len = gu_strlcat(toString,
", ", bufferSize);
418 if (len >= bufferSize) {
421 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->InertialSensor_GyroscopeZ);
422 if (len >= bufferSize) {
425 len = gu_strlcat(toString,
", ", bufferSize);
426 if (len >= bufferSize) {
429 len += snprintf(toString + len, bufferSize - len,
"%u", self->Battery_Charge);
430 if (len >= bufferSize) {
433 len = gu_strlcat(toString,
", ", bufferSize);
434 if (len >= bufferSize) {
437 len += snprintf(toString + len, bufferSize - len,
"%u", self->Battery_Current);
438 if (len >= bufferSize) {
441 len = gu_strlcat(toString,
", ", bufferSize);
442 if (len >= bufferSize) {
445 len += snprintf(toString + len, bufferSize - len,
"%lf", (
double) self->US);
446 if (len >= bufferSize) {
449 len = gu_strlcat(toString,
", ", bufferSize);
450 if (len >= bufferSize) {
453 len = gu_strlcat(toString, self->ChestBoard_Button ?
"true" :
"false", bufferSize);
455#pragma clang diagnostic pop
463 size_t temp_length = strlen(str);
464 int length = (temp_length <= INT_MAX) ? ((
int)((ssize_t)temp_length)) : -1;
469 char* var_str = &var_str_buffer[0];
471 char* key = &key_buffer[0];
478 if (index == 0 && str[0] ==
'{') {
484 for (
int i = index; i < length; i++) {
486 if (bracecount == 0 && str[i] ==
'=') {
491 if (bracecount == 0 && isspace(str[i])) {
498 if (bracecount == 0 && str[i] ==
',') {
508 if (bracecount < 0) {
513 if (i == length - 1) {
517 if (endKey >= startKey && endKey - startKey < length) {
518 strncpy(key, str + startKey, ((
size_t)(endKey - startKey) + 1));
519 key[(endKey - startKey) + 1] = 0;
523 strncpy(var_str, str + startVar, ((
size_t)(index - startVar) + 1));
524 var_str[(index - startVar) + 1] = 0;
530 if (strlen(key) > 0) {
531 if (0 == strcmp(
"DCM_Time", key)) {
533 }
else if (0 == strcmp(
"InertialSensor_AccX", key)) {
535 }
else if (0 == strcmp(
"InertialSensor_AccY", key)) {
537 }
else if (0 == strcmp(
"InertialSensor_AccZ", key)) {
539 }
else if (0 == strcmp(
"InertialSensor_GyrX", key)) {
541 }
else if (0 == strcmp(
"InertialSensor_GyrY", key)) {
543 }
else if (0 == strcmp(
"InertialSensor_GyrZ", key)) {
545 }
else if (0 == strcmp(
"InertialSensor_AngleX", key)) {
547 }
else if (0 == strcmp(
"InertialSensor_AngleY", key)) {
549 }
else if (0 == strcmp(
"InertialSensor_AngleZ", key)) {
551 }
else if (0 == strcmp(
"InertialSensor_AccelerometerX", key)) {
553 }
else if (0 == strcmp(
"InertialSensor_AccelerometerY", key)) {
555 }
else if (0 == strcmp(
"InertialSensor_AccelerometerZ", key)) {
557 }
else if (0 == strcmp(
"InertialSensor_GyroscopeX", key)) {
559 }
else if (0 == strcmp(
"InertialSensor_GyroscopeY", key)) {
561 }
else if (0 == strcmp(
"InertialSensor_GyroscopeZ", key)) {
563 }
else if (0 == strcmp(
"Battery_Charge", key)) {
565 }
else if (0 == strcmp(
"Battery_Current", key)) {
567 }
else if (0 == strcmp(
"US", key)) {
569 }
else if (0 == strcmp(
"ChestBoard_Button", key)) {
579 self->DCM_Time = ((
signed int)atoi(var_str));
584 self->InertialSensor_AccX = ((float)atof(var_str));
589 self->InertialSensor_AccY = ((float)atof(var_str));
594 self->InertialSensor_AccZ = ((float)atof(var_str));
599 self->InertialSensor_GyrX = ((float)atof(var_str));
604 self->InertialSensor_GyrY = ((float)atof(var_str));
609 self->InertialSensor_GyrZ = ((float)atof(var_str));
614 self->InertialSensor_AngleX = ((float)atof(var_str));
619 self->InertialSensor_AngleY = ((float)atof(var_str));
624 self->InertialSensor_AngleZ = ((float)atof(var_str));
629 self->InertialSensor_AccelerometerX = ((float)atof(var_str));
634 self->InertialSensor_AccelerometerY = ((float)atof(var_str));
639 self->InertialSensor_AccelerometerZ = ((float)atof(var_str));
644 self->InertialSensor_GyroscopeX = ((float)atof(var_str));
649 self->InertialSensor_GyroscopeY = ((float)atof(var_str));
654 self->InertialSensor_GyroscopeZ = ((float)atof(var_str));
659 self->Battery_Charge = ((uint8_t)atoi(var_str));
664 self->Battery_Current = ((uint8_t)atoi(var_str));
669 self->US = ((float)atof(var_str));
674 self->ChestBoard_Button = strcmp(var_str,
"true") == 0 || strcmp(var_str,
"1") == 0;
681 }
while(index < length);
692 uint16_t bit_offset = 0;
693 signed int DCM_Time_nbo =
htonl(self->DCM_Time);
696 for (b = (32 - 1); b >= 0; b--) {
698 uint16_t
byte = bit_offset / 8;
699 uint16_t bit = 7 - (bit_offset % 8);
700 unsigned long newbit = !!((DCM_Time_nbo >> b) & 1U);
701 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
702 bit_offset = bit_offset + 1;
737 uint8_t Battery_Charge_nbo = (
self->Battery_Charge);
740 for (b = (8 - 1); b >= 0; b--) {
742 uint16_t
byte = bit_offset / 8;
743 uint16_t bit = 7 - (bit_offset % 8);
744 unsigned long newbit = !!((Battery_Charge_nbo >> b) & 1U);
745 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
746 bit_offset = bit_offset + 1;
751 uint8_t Battery_Current_nbo = (
self->Battery_Current);
754 for (b = (8 - 1); b >= 0; b--) {
756 uint16_t
byte = bit_offset / 8;
757 uint16_t bit = 7 - (bit_offset % 8);
758 unsigned long newbit = !!((Battery_Current_nbo >> b) & 1U);
759 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
760 bit_offset = bit_offset + 1;
768 uint16_t
byte = bit_offset / 8;
769 uint16_t bit = 7 - (bit_offset % 8);
770 unsigned long newbit = !!(
self->ChestBoard_Button ? 1U : 0U);
771 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
772 bit_offset = bit_offset + 1;
785 uint16_t bit_offset = 0;
788 for (b = (32 - 1); b >= 0; b--) {
790 uint16_t
byte = bit_offset / 8;
791 uint16_t bit = 7 - (bit_offset % 8);
792 char dataByte = src[byte];
793 unsigned char bitValue = (dataByte >> bit) & 1U;
795 bit_offset = bit_offset + 1;
833 for (b = (8 - 1); b >= 0; b--) {
835 uint16_t
byte = bit_offset / 8;
836 uint16_t bit = 7 - (bit_offset % 8);
837 char dataByte = src[byte];
838 unsigned char bitValue = (dataByte >> bit) & 1U;
840 bit_offset = bit_offset + 1;
848 for (b = (8 - 1); b >= 0; b--) {
850 uint16_t
byte = bit_offset / 8;
851 uint16_t bit = 7 - (bit_offset % 8);
852 char dataByte = src[byte];
853 unsigned char bitValue = (dataByte >> bit) & 1U;
855 bit_offset = bit_offset + 1;
864 uint16_t
byte = bit_offset / 8;
865 uint16_t bit = 7 - (bit_offset % 8);
866 char dataByte = src[byte];
867 unsigned char bitValue = (dataByte >> bit) & 1U;
869 bit_offset = bit_offset + 1;
WHITEBOARD_POSTER_STRING_CONVERSION.
uint8_t Battery_Charge
% of charge
bool ChestBoard_Button
state of the chest button, on / off.
signed int DCM_Time
Absolute time used for all timed commands in the DCM, an integer (signed), with 1 ms precision.
uint8_t Battery_Current
Amps.
struct wb_sensors_body_sensors * wb_sensors_body_sensors_from_string(struct wb_sensors_body_sensors *self, const char *str)
Convert from a string.
size_t wb_sensors_body_sensors_from_network_serialised(const char *src, struct wb_sensors_body_sensors *dst)
Convert from a compressed, serialised, network byte order byte stream.
size_t wb_sensors_body_sensors_to_network_serialised(const struct wb_sensors_body_sensors *self, char *dst)
Convert to a compressed, serialised, network byte order byte stream.
const char * wb_sensors_body_sensors_description(const struct wb_sensors_body_sensors *self, char *descString, size_t bufferSize)
Convert to a description string.
const char * wb_sensors_body_sensors_to_string(const struct wb_sensors_body_sensors *self, char *toString, size_t bufferSize)
Convert to a string.
#define SENSORS_BODY_SENSORS_DESC_BUFFER_SIZE