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,
"ip=%u", self->ip);
134 if (len >= bufferSize) {
137 len = gu_strlcat(descString,
", ", bufferSize);
138 if (len >= bufferSize) {
141 len += snprintf(descString + len, bufferSize - len,
"action=%d", self->action);
142 if (len >= bufferSize) {
145 len = gu_strlcat(descString,
", ", bufferSize);
146 if (len >= bufferSize) {
149 len += snprintf(descString + len, bufferSize - len,
"stance=%d", self->stance);
150 if (len >= bufferSize) {
153 len = gu_strlcat(descString,
", ", bufferSize);
154 if (len >= bufferSize) {
157 len += snprintf(descString + len, bufferSize - len,
"streamType=%d", self->streamType);
158 if (len >= bufferSize) {
161 len = gu_strlcat(descString,
", ", bufferSize);
162 if (len >= bufferSize) {
165 len += snprintf(descString + len, bufferSize - len,
"selectedCamera=%d", self->selectedCamera);
166 if (len >= bufferSize) {
169 len = gu_strlcat(descString,
", ", bufferSize);
170 if (len >= bufferSize) {
173 len += snprintf(descString + len, bufferSize - len,
"sayString=%s", self->sayString);
175#pragma clang diagnostic pop
183#pragma clang diagnostic push
184#pragma clang diagnostic ignored "-Wunused-variable"
186 if (len >= bufferSize) {
189 len += snprintf(toString + len, bufferSize - len,
"%u", self->ip);
190 if (len >= bufferSize) {
193 len = gu_strlcat(toString,
", ", bufferSize);
194 if (len >= bufferSize) {
197 len += snprintf(toString + len, bufferSize - len,
"%d", self->action);
198 if (len >= bufferSize) {
201 len = gu_strlcat(toString,
", ", bufferSize);
202 if (len >= bufferSize) {
205 len += snprintf(toString + len, bufferSize - len,
"%d", self->stance);
206 if (len >= bufferSize) {
209 len = gu_strlcat(toString,
", ", bufferSize);
210 if (len >= bufferSize) {
213 len += snprintf(toString + len, bufferSize - len,
"%d", self->streamType);
214 if (len >= bufferSize) {
217 len = gu_strlcat(toString,
", ", bufferSize);
218 if (len >= bufferSize) {
221 len += snprintf(toString + len, bufferSize - len,
"%d", self->selectedCamera);
222 if (len >= bufferSize) {
225 len = gu_strlcat(toString,
", ", bufferSize);
226 if (len >= bufferSize) {
229 len += snprintf(toString + len, bufferSize - len,
"%s", self->sayString);
231#pragma clang diagnostic pop
239 size_t temp_length = strlen(str);
240 int length = (temp_length <= INT_MAX) ? ((
int)((ssize_t)temp_length)) : -1;
245 char* var_str = &var_str_buffer[0];
247 char* key = &key_buffer[0];
254 if (index == 0 && str[0] ==
'{') {
260 for (
int i = index; i < length; i++) {
262 if (bracecount == 0 && str[i] ==
'=') {
267 if (bracecount == 0 && isspace(str[i])) {
274 if (bracecount == 0 && str[i] ==
',') {
284 if (bracecount < 0) {
289 if (i == length - 1) {
293 if (endKey >= startKey && endKey - startKey < length) {
294 strncpy(key, str + startKey, ((
size_t)(endKey - startKey) + 1));
295 key[(endKey - startKey) + 1] = 0;
299 strncpy(var_str, str + startVar, ((
size_t)(index - startVar) + 1));
300 var_str[(index - startVar) + 1] = 0;
306 if (strlen(key) > 0) {
307 if (0 == strcmp(
"ip", key)) {
309 }
else if (0 == strcmp(
"action", key)) {
311 }
else if (0 == strcmp(
"stance", key)) {
313 }
else if (0 == strcmp(
"streamType", key)) {
315 }
else if (0 == strcmp(
"selectedCamera", key)) {
317 }
else if (0 == strcmp(
"sayString", key)) {
327 self->ip = ((uint8_t)atoi(var_str));
332 self->action = ((int32_t)atoi(var_str));
337 self->stance = ((int32_t)atoi(var_str));
342 self->streamType = ((int32_t)atoi(var_str));
347 self->selectedCamera = ((int32_t)atoi(var_str));
352 strncpy(self->sayString, var_str, 30);
359 }
while(index < length);
370 uint16_t bit_offset = 0;
371 uint8_t ip_nbo = (
self->ip);
374 for (b = (8 - 1); b >= 0; b--) {
376 uint16_t
byte = bit_offset / 8;
377 uint16_t bit = 7 - (bit_offset % 8);
378 unsigned long newbit = !!((ip_nbo >> b) & 1U);
379 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
380 bit_offset = bit_offset + 1;
385 int32_t action_nbo =
htonl(self->action);
388 for (b = (32 - 1); b >= 0; b--) {
390 uint16_t
byte = bit_offset / 8;
391 uint16_t bit = 7 - (bit_offset % 8);
392 unsigned long newbit = !!((action_nbo >> b) & 1U);
393 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
394 bit_offset = bit_offset + 1;
399 int32_t stance_nbo =
htonl(self->stance);
402 for (b = (32 - 1); b >= 0; b--) {
404 uint16_t
byte = bit_offset / 8;
405 uint16_t bit = 7 - (bit_offset % 8);
406 unsigned long newbit = !!((stance_nbo >> b) & 1U);
407 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
408 bit_offset = bit_offset + 1;
413 int32_t streamType_nbo =
htonl(self->streamType);
416 for (b = (32 - 1); b >= 0; b--) {
418 uint16_t
byte = bit_offset / 8;
419 uint16_t bit = 7 - (bit_offset % 8);
420 unsigned long newbit = !!((streamType_nbo >> b) & 1U);
421 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
422 bit_offset = bit_offset + 1;
427 int32_t selectedCamera_nbo =
htonl(self->selectedCamera);
430 for (b = (32 - 1); b >= 0; b--) {
432 uint16_t
byte = bit_offset / 8;
433 uint16_t bit = 7 - (bit_offset % 8);
434 unsigned long newbit = !!((selectedCamera_nbo >> b) & 1U);
435 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
436 bit_offset = bit_offset + 1;
442 uint8_t len = (uint8_t) strlen(self->sayString);
444 for (b = 7; b >= 0; b--) {
446 uint16_t
byte = bit_offset / 8;
447 uint16_t bit = 7 - (bit_offset % 8);
448 unsigned long newbit = !!((len >> b) & 1U);
449 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
450 bit_offset = bit_offset + 1;
454 for (c = 0; c < len; c++) {
455 for (b = 7; b >= 0; b--) {
457 uint16_t
byte = bit_offset / 8;
458 uint16_t bit = 7 - (bit_offset % 8);
459 unsigned long newbit = !!((
self->sayString[c] >> b) & 1U);
460 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
461 bit_offset = bit_offset + 1;
477 uint16_t bit_offset = 0;
480 for (b = (8 - 1); b >= 0; b--) {
482 uint16_t
byte = bit_offset / 8;
483 uint16_t bit = 7 - (bit_offset % 8);
484 char dataByte = src[byte];
485 unsigned char bitValue = (dataByte >> bit) & 1U;
486 dst->
ip ^= (-bitValue ^ dst->
ip) & (1UL << b);
487 bit_offset = bit_offset + 1;
495 for (b = (32 - 1); b >= 0; b--) {
497 uint16_t
byte = bit_offset / 8;
498 uint16_t bit = 7 - (bit_offset % 8);
499 char dataByte = src[byte];
500 unsigned char bitValue = (dataByte >> bit) & 1U;
502 bit_offset = bit_offset + 1;
510 for (b = (32 - 1); b >= 0; b--) {
512 uint16_t
byte = bit_offset / 8;
513 uint16_t bit = 7 - (bit_offset % 8);
514 char dataByte = src[byte];
515 unsigned char bitValue = (dataByte >> bit) & 1U;
517 bit_offset = bit_offset + 1;
525 for (b = (32 - 1); b >= 0; b--) {
527 uint16_t
byte = bit_offset / 8;
528 uint16_t bit = 7 - (bit_offset % 8);
529 char dataByte = src[byte];
530 unsigned char bitValue = (dataByte >> bit) & 1U;
532 bit_offset = bit_offset + 1;
540 for (b = (32 - 1); b >= 0; b--) {
542 uint16_t
byte = bit_offset / 8;
543 uint16_t bit = 7 - (bit_offset % 8);
544 char dataByte = src[byte];
545 unsigned char bitValue = (dataByte >> bit) & 1U;
547 bit_offset = bit_offset + 1;
556 for (b = 7; b >= 0; b--) {
558 uint16_t
byte = bit_offset / 8;
559 uint16_t bit = 7 - (bit_offset % 8);
560 char dataByte = src[byte];
561 unsigned char bitValue = (dataByte >> bit) & 1U;
562 len ^= (-bitValue ^ len) & (1UL << b);
563 bit_offset = bit_offset + 1;
567 for (c = 0; c < len; c++) {
568 for (b = 7; b >= 0; b--) {
570 uint16_t
byte = bit_offset / 8;
571 uint16_t bit = 7 - (bit_offset % 8);
572 char dataByte = src[byte];
573 unsigned char bitValue = (dataByte >> bit) & 1U;
575 bit_offset = bit_offset + 1;
WHITEBOARD_POSTER_STRING_CONVERSION.
char sayString[30]
String passed to Say_t.
int32_t streamType
Use enum StreamingType (Vision_Control.h)
int32_t selectedCamera
VisionCamera.
int32_t action
Use guWhiteboard::Motions::action enum values!
uint8_t ip
Last octet of IP address.
int32_t stance
guWhiteboard::Motions::stance
size_t wb_teleoperation_control_from_network_serialised(const char *src, struct wb_teleoperation_control *dst)
Convert from a compressed, serialised, network byte order byte stream.
struct wb_teleoperation_control * wb_teleoperation_control_from_string(struct wb_teleoperation_control *self, const char *str)
Convert from a string.
const char * wb_teleoperation_control_description(const struct wb_teleoperation_control *self, char *descString, size_t bufferSize)
Convert to a description string.
const char * wb_teleoperation_control_to_string(const struct wb_teleoperation_control *self, char *toString, size_t bufferSize)
Convert to a string.
size_t wb_teleoperation_control_to_network_serialised(const struct wb_teleoperation_control *self, char *dst)
Convert to a compressed, serialised, network byte order byte stream.
#define TELEOPERATIONCONTROL_DESC_BUFFER_SIZE