gusimplewhiteboard
wb_nao_walk_command.c
Go to the documentation of this file.
1/*
2 * file wb_nao_walk_command.c
3 *
4 * This file was generated by classgenerator from naoWalkCommand.gen.
5 * DO NOT CHANGE MANUALLY!
6 *
7 * Copyright © 2021 Carl Lusty. 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 Carl Lusty.
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
64#include "wb_nao_walk_command.h"
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_nao_walk_command_description(const struct wb_nao_walk_command* 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->walkEngineOn ? "walkEngineOn=true" : "walkEngineOn=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 += snprintf(descString + len, bufferSize - len, "forward=%d", self->forward);
142 if (len >= bufferSize) {
143 return descString;
144 }
145 len = gu_strlcat(descString, ", ", bufferSize);
146 if (len >= bufferSize) {
147 return descString;
148 }
149 len += snprintf(descString + len, bufferSize - len, "left=%d", self->left);
150 if (len >= bufferSize) {
151 return descString;
152 }
153 len = gu_strlcat(descString, ", ", bufferSize);
154 if (len >= bufferSize) {
155 return descString;
156 }
157 len += snprintf(descString + len, bufferSize - len, "turn=%d", self->turn);
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->exactStepsRequested ? "exactStepsRequested=true" : "exactStepsRequested=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 += snprintf(descString + len, bufferSize - len, "speed=%u", self->speed);
174 if (len >= bufferSize) {
175 return descString;
176 }
177 len = gu_strlcat(descString, ", ", bufferSize);
178 if (len >= bufferSize) {
179 return descString;
180 }
181 len += snprintf(descString + len, bufferSize - len, "odometryResetCounter=%u", self->odometryResetCounter);
182 if (len >= bufferSize) {
183 return descString;
184 }
185 len = gu_strlcat(descString, ", ", bufferSize);
186 if (len >= bufferSize) {
187 return descString;
188 }
189 len = gu_strlcat(descString, self->isFast ? "isFast=true" : "isFast=false", bufferSize);
190 if (len >= bufferSize) {
191 return descString;
192 }
193 len = gu_strlcat(descString, ", ", bufferSize);
194 if (len >= bufferSize) {
195 return descString;
196 }
197 len = gu_strlcat(descString, self->kickWithLeftFoot ? "kickWithLeftFoot=true" : "kickWithLeftFoot=false", bufferSize);
198 if (len >= bufferSize) {
199 return descString;
200 }
201 len = gu_strlcat(descString, ", ", bufferSize);
202 if (len >= bufferSize) {
203 return descString;
204 }
205 len = gu_strlcat(descString, self->useShuffle ? "useShuffle=true" : "useShuffle=false", bufferSize);
206 if (len >= bufferSize) {
207 return descString;
208 }
209 len = gu_strlcat(descString, ", ", bufferSize);
210 if (len >= bufferSize) {
211 return descString;
212 }
213 len = gu_strlcat(descString, self->leftArmLimp ? "leftArmLimp=true" : "leftArmLimp=false", bufferSize);
214 if (len >= bufferSize) {
215 return descString;
216 }
217 len = gu_strlcat(descString, ", ", bufferSize);
218 if (len >= bufferSize) {
219 return descString;
220 }
221 len = gu_strlcat(descString, self->rightArmLimp ? "rightArmLimp=true" : "rightArmLimp=false", bufferSize);
222 if (len >= bufferSize) {
223 return descString;
224 }
225 len = gu_strlcat(descString, ", ", bufferSize);
226 if (len >= bufferSize) {
227 return descString;
228 }
229 len += snprintf(descString + len, bufferSize - len, "power=%u", self->power);
230 if (len >= bufferSize) {
231 return descString;
232 }
233 len = gu_strlcat(descString, ", ", bufferSize);
234 if (len >= bufferSize) {
235 return descString;
236 }
237 len += snprintf(descString + len, bufferSize - len, "bend=%u", self->bend);
238 return descString;
239#pragma clang diagnostic pop
240}
241
245const char* wb_nao_walk_command_to_string(const struct wb_nao_walk_command* self, char* toString, size_t bufferSize)
246{
247#pragma clang diagnostic push
248#pragma clang diagnostic ignored "-Wunused-variable"
249 size_t len = 0;
250 if (len >= bufferSize) {
251 return toString;
252 }
253 len = gu_strlcat(toString, self->walkEngineOn ? "true" : "false", bufferSize);
254 if (len >= bufferSize) {
255 return toString;
256 }
257 len = gu_strlcat(toString, ", ", bufferSize);
258 if (len >= bufferSize) {
259 return toString;
260 }
261 len += snprintf(toString + len, bufferSize - len, "%d", self->forward);
262 if (len >= bufferSize) {
263 return toString;
264 }
265 len = gu_strlcat(toString, ", ", bufferSize);
266 if (len >= bufferSize) {
267 return toString;
268 }
269 len += snprintf(toString + len, bufferSize - len, "%d", self->left);
270 if (len >= bufferSize) {
271 return toString;
272 }
273 len = gu_strlcat(toString, ", ", bufferSize);
274 if (len >= bufferSize) {
275 return toString;
276 }
277 len += snprintf(toString + len, bufferSize - len, "%d", self->turn);
278 if (len >= bufferSize) {
279 return toString;
280 }
281 len = gu_strlcat(toString, ", ", bufferSize);
282 if (len >= bufferSize) {
283 return toString;
284 }
285 len = gu_strlcat(toString, self->exactStepsRequested ? "true" : "false", bufferSize);
286 if (len >= bufferSize) {
287 return toString;
288 }
289 len = gu_strlcat(toString, ", ", bufferSize);
290 if (len >= bufferSize) {
291 return toString;
292 }
293 len += snprintf(toString + len, bufferSize - len, "%u", self->speed);
294 if (len >= bufferSize) {
295 return toString;
296 }
297 len = gu_strlcat(toString, ", ", bufferSize);
298 if (len >= bufferSize) {
299 return toString;
300 }
301 len += snprintf(toString + len, bufferSize - len, "%u", self->odometryResetCounter);
302 if (len >= bufferSize) {
303 return toString;
304 }
305 len = gu_strlcat(toString, ", ", bufferSize);
306 if (len >= bufferSize) {
307 return toString;
308 }
309 len = gu_strlcat(toString, self->isFast ? "true" : "false", bufferSize);
310 if (len >= bufferSize) {
311 return toString;
312 }
313 len = gu_strlcat(toString, ", ", bufferSize);
314 if (len >= bufferSize) {
315 return toString;
316 }
317 len = gu_strlcat(toString, self->kickWithLeftFoot ? "true" : "false", bufferSize);
318 if (len >= bufferSize) {
319 return toString;
320 }
321 len = gu_strlcat(toString, ", ", bufferSize);
322 if (len >= bufferSize) {
323 return toString;
324 }
325 len = gu_strlcat(toString, self->useShuffle ? "true" : "false", bufferSize);
326 if (len >= bufferSize) {
327 return toString;
328 }
329 len = gu_strlcat(toString, ", ", bufferSize);
330 if (len >= bufferSize) {
331 return toString;
332 }
333 len = gu_strlcat(toString, self->leftArmLimp ? "true" : "false", bufferSize);
334 if (len >= bufferSize) {
335 return toString;
336 }
337 len = gu_strlcat(toString, ", ", bufferSize);
338 if (len >= bufferSize) {
339 return toString;
340 }
341 len = gu_strlcat(toString, self->rightArmLimp ? "true" : "false", bufferSize);
342 if (len >= bufferSize) {
343 return toString;
344 }
345 len = gu_strlcat(toString, ", ", bufferSize);
346 if (len >= bufferSize) {
347 return toString;
348 }
349 len += snprintf(toString + len, bufferSize - len, "%u", self->power);
350 if (len >= bufferSize) {
351 return toString;
352 }
353 len = gu_strlcat(toString, ", ", bufferSize);
354 if (len >= bufferSize) {
355 return toString;
356 }
357 len += snprintf(toString + len, bufferSize - len, "%u", self->bend);
358 return toString;
359#pragma clang diagnostic pop
360}
361
366{
367 size_t temp_length = strlen(str);
368 int length = (temp_length <= INT_MAX) ? ((int)((ssize_t)temp_length)) : -1;
369 if (length < 1 || length > NAOWALKCOMMAND_DESC_BUFFER_SIZE) {
370 return self;
371 }
372 char var_str_buffer[NAOWALKCOMMAND_DESC_BUFFER_SIZE + 1];
373 char* var_str = &var_str_buffer[0];
374 char key_buffer[21];
375 char* key = &key_buffer[0];
376 int bracecount = 0;
377 int startVar = 0;
378 int index = 0;
379 int startKey = 0;
380 int endKey = -1;
381 int varIndex = 0;
382 if (index == 0 && str[0] == '{') {
383 index = 1;
384 }
385 startVar = index;
386 startKey = startVar;
387 do {
388 for (int i = index; i < length; i++) {
389 index = i + 1;
390 if (bracecount == 0 && str[i] == '=') {
391 endKey = i - 1;
392 startVar = index;
393 continue;
394 }
395 if (bracecount == 0 && isspace(str[i])) {
396 startVar = index;
397 if (endKey == -1) {
398 startKey = index;
399 }
400 continue;
401 }
402 if (bracecount == 0 && str[i] == ',') {
403 index = i - 1;
404 break;
405 }
406 if (str[i] == '{') {
407 bracecount++;
408 continue;
409 }
410 if (str[i] == '}') {
411 bracecount--;
412 if (bracecount < 0) {
413 index = i - 1;
414 break;
415 }
416 }
417 if (i == length - 1) {
418 index = i;
419 }
420 }
421 if (endKey >= startKey && endKey - startKey < length) {
422 strncpy(key, str + startKey, ((size_t)(endKey - startKey) + 1));
423 key[(endKey - startKey) + 1] = 0;
424 } else {
425 key[0] = 0;
426 }
427 strncpy(var_str, str + startVar, ((size_t)(index - startVar) + 1));
428 var_str[(index - startVar) + 1] = 0;
429 bracecount = 0;
430 index += 2;
431 startVar = index;
432 startKey = startVar;
433 endKey = -1;
434 if (strlen(key) > 0) {
435 if (0 == strcmp("walkEngineOn", key)) {
436 varIndex = 0;
437 } else if (0 == strcmp("forward", key)) {
438 varIndex = 1;
439 } else if (0 == strcmp("left", key)) {
440 varIndex = 2;
441 } else if (0 == strcmp("turn", key)) {
442 varIndex = 3;
443 } else if (0 == strcmp("exactStepsRequested", key)) {
444 varIndex = 4;
445 } else if (0 == strcmp("speed", key)) {
446 varIndex = 5;
447 } else if (0 == strcmp("odometryResetCounter", key)) {
448 varIndex = 6;
449 } else if (0 == strcmp("isFast", key)) {
450 varIndex = 7;
451 } else if (0 == strcmp("kickWithLeftFoot", key)) {
452 varIndex = 8;
453 } else if (0 == strcmp("useShuffle", key)) {
454 varIndex = 9;
455 } else if (0 == strcmp("leftArmLimp", key)) {
456 varIndex = 10;
457 } else if (0 == strcmp("rightArmLimp", key)) {
458 varIndex = 11;
459 } else if (0 == strcmp("power", key)) {
460 varIndex = 12;
461 } else if (0 == strcmp("bend", key)) {
462 varIndex = 13;
463 } else {
464 varIndex = -1;
465 }
466 }
467 switch (varIndex) {
468 case -1: { break; }
469 case 0:
470 {
471 self->walkEngineOn = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
472 break;
473 }
474 case 1:
475 {
476 self->forward = ((int16_t)atoi(var_str));
477 break;
478 }
479 case 2:
480 {
481 self->left = ((int16_t)atoi(var_str));
482 break;
483 }
484 case 3:
485 {
486 self->turn = ((int8_t)atoi(var_str));
487 break;
488 }
489 case 4:
490 {
491 self->exactStepsRequested = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
492 break;
493 }
494 case 5:
495 {
496 self->speed = ((uint8_t)atoi(var_str));
497 break;
498 }
499 case 6:
500 {
501 self->odometryResetCounter = ((uint8_t)atoi(var_str));
502 break;
503 }
504 case 7:
505 {
506 self->isFast = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
507 break;
508 }
509 case 8:
510 {
511 self->kickWithLeftFoot = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
512 break;
513 }
514 case 9:
515 {
516 self->useShuffle = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
517 break;
518 }
519 case 10:
520 {
521 self->leftArmLimp = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
522 break;
523 }
524 case 11:
525 {
526 self->rightArmLimp = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
527 break;
528 }
529 case 12:
530 {
531 self->power = ((uint8_t)atoi(var_str));
532 break;
533 }
534 case 13:
535 {
536 self->bend = ((uint8_t)atoi(var_str));
537 break;
538 }
539 }
540 if (varIndex >= 0) {
541 varIndex++;
542 }
543 } while(index < length);
544 return self;
545}
546
547/*#ifdef WHITEBOARD_SERIALISATION*/
548
553{
554 uint16_t bit_offset = 0;
555 do {
556 uint16_t byte = bit_offset / 8;
557 uint16_t bit = 7 - (bit_offset % 8);
558 unsigned long newbit = !!(self->walkEngineOn ? 1U : 0U);
559 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
560 bit_offset = bit_offset + 1;
561 } while(false);
562
563 int16_t forward_nbo = htons(self->forward);
564 do {
565 int8_t b;
566 for (b = (16 - 1); b >= 0; b--) {
567 do {
568 uint16_t byte = bit_offset / 8;
569 uint16_t bit = 7 - (bit_offset % 8);
570 unsigned long newbit = !!((forward_nbo >> b) & 1U);
571 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
572 bit_offset = bit_offset + 1;
573 } while(false);
574 }
575 } while(false);
576
577 int16_t left_nbo = htons(self->left);
578 do {
579 int8_t b;
580 for (b = (16 - 1); b >= 0; b--) {
581 do {
582 uint16_t byte = bit_offset / 8;
583 uint16_t bit = 7 - (bit_offset % 8);
584 unsigned long newbit = !!((left_nbo >> b) & 1U);
585 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
586 bit_offset = bit_offset + 1;
587 } while(false);
588 }
589 } while(false);
590
591 int8_t turn_nbo = (self->turn);
592 do {
593 int8_t b;
594 for (b = (8 - 1); b >= 0; b--) {
595 do {
596 uint16_t byte = bit_offset / 8;
597 uint16_t bit = 7 - (bit_offset % 8);
598 unsigned long newbit = !!((turn_nbo >> b) & 1U);
599 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
600 bit_offset = bit_offset + 1;
601 } while(false);
602 }
603 } while(false);
604
605 do {
606 uint16_t byte = bit_offset / 8;
607 uint16_t bit = 7 - (bit_offset % 8);
608 unsigned long newbit = !!(self->exactStepsRequested ? 1U : 0U);
609 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
610 bit_offset = bit_offset + 1;
611 } while(false);
612
613 uint8_t speed_nbo = (self->speed);
614 do {
615 int8_t b;
616 for (b = (8 - 1); b >= 0; b--) {
617 do {
618 uint16_t byte = bit_offset / 8;
619 uint16_t bit = 7 - (bit_offset % 8);
620 unsigned long newbit = !!((speed_nbo >> b) & 1U);
621 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
622 bit_offset = bit_offset + 1;
623 } while(false);
624 }
625 } while(false);
626
627 uint8_t odometryResetCounter_nbo = (self->odometryResetCounter);
628 do {
629 int8_t b;
630 for (b = (8 - 1); b >= 0; b--) {
631 do {
632 uint16_t byte = bit_offset / 8;
633 uint16_t bit = 7 - (bit_offset % 8);
634 unsigned long newbit = !!((odometryResetCounter_nbo >> b) & 1U);
635 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
636 bit_offset = bit_offset + 1;
637 } while(false);
638 }
639 } while(false);
640
641 do {
642 uint16_t byte = bit_offset / 8;
643 uint16_t bit = 7 - (bit_offset % 8);
644 unsigned long newbit = !!(self->isFast ? 1U : 0U);
645 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
646 bit_offset = bit_offset + 1;
647 } while(false);
648
649 do {
650 uint16_t byte = bit_offset / 8;
651 uint16_t bit = 7 - (bit_offset % 8);
652 unsigned long newbit = !!(self->kickWithLeftFoot ? 1U : 0U);
653 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
654 bit_offset = bit_offset + 1;
655 } while(false);
656
657 do {
658 uint16_t byte = bit_offset / 8;
659 uint16_t bit = 7 - (bit_offset % 8);
660 unsigned long newbit = !!(self->useShuffle ? 1U : 0U);
661 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
662 bit_offset = bit_offset + 1;
663 } while(false);
664
665 do {
666 uint16_t byte = bit_offset / 8;
667 uint16_t bit = 7 - (bit_offset % 8);
668 unsigned long newbit = !!(self->leftArmLimp ? 1U : 0U);
669 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
670 bit_offset = bit_offset + 1;
671 } while(false);
672
673 do {
674 uint16_t byte = bit_offset / 8;
675 uint16_t bit = 7 - (bit_offset % 8);
676 unsigned long newbit = !!(self->rightArmLimp ? 1U : 0U);
677 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
678 bit_offset = bit_offset + 1;
679 } while(false);
680
681 uint8_t power_nbo = (self->power);
682 do {
683 int8_t b;
684 for (b = (8 - 1); b >= 0; b--) {
685 do {
686 uint16_t byte = bit_offset / 8;
687 uint16_t bit = 7 - (bit_offset % 8);
688 unsigned long newbit = !!((power_nbo >> b) & 1U);
689 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
690 bit_offset = bit_offset + 1;
691 } while(false);
692 }
693 } while(false);
694
695 uint8_t bend_nbo = (self->bend);
696 do {
697 int8_t b;
698 for (b = (8 - 1); b >= 0; b--) {
699 do {
700 uint16_t byte = bit_offset / 8;
701 uint16_t bit = 7 - (bit_offset % 8);
702 unsigned long newbit = !!((bend_nbo >> b) & 1U);
703 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
704 bit_offset = bit_offset + 1;
705 } while(false);
706 }
707 } while(false);
708 //avoid unused variable warnings when you try to use an empty gen file or a gen file with no supported serialisation types.
709 (void)self;
710 (void)dst;
711 return bit_offset;
712}
713
718{
719 uint16_t bit_offset = 0;
720 do {
721 uint16_t byte = bit_offset / 8;
722 uint16_t bit = 7 - (bit_offset % 8);
723 char dataByte = src[byte];
724 unsigned char bitValue = (dataByte >> bit) & 1U;
725 dst->walkEngineOn = bitValue != 0;
726 bit_offset = bit_offset + 1;
727 } while(false);
728
729 do {
730 int8_t b;
731 for (b = (16 - 1); b >= 0; b--) {
732 do {
733 uint16_t byte = bit_offset / 8;
734 uint16_t bit = 7 - (bit_offset % 8);
735 char dataByte = src[byte];
736 unsigned char bitValue = (dataByte >> bit) & 1U;
737 dst->forward ^= (-bitValue ^ dst->forward) & (1UL << b);
738 bit_offset = bit_offset + 1;
739 } while(false);
740 }
741 } while(false);
742 dst->forward = ntohs(dst->forward);
743
744 do {
745 int8_t b;
746 for (b = (16 - 1); b >= 0; b--) {
747 do {
748 uint16_t byte = bit_offset / 8;
749 uint16_t bit = 7 - (bit_offset % 8);
750 char dataByte = src[byte];
751 unsigned char bitValue = (dataByte >> bit) & 1U;
752 dst->left ^= (-bitValue ^ dst->left) & (1UL << b);
753 bit_offset = bit_offset + 1;
754 } while(false);
755 }
756 } while(false);
757 dst->left = ntohs(dst->left);
758
759 do {
760 int8_t b;
761 for (b = (8 - 1); b >= 0; b--) {
762 do {
763 uint16_t byte = bit_offset / 8;
764 uint16_t bit = 7 - (bit_offset % 8);
765 char dataByte = src[byte];
766 unsigned char bitValue = (dataByte >> bit) & 1U;
767 dst->turn ^= (-bitValue ^ dst->turn) & (1UL << b);
768 bit_offset = bit_offset + 1;
769 } while(false);
770 }
771 } while(false);
772 dst->turn = (dst->turn);
773
774 do {
775 uint16_t byte = bit_offset / 8;
776 uint16_t bit = 7 - (bit_offset % 8);
777 char dataByte = src[byte];
778 unsigned char bitValue = (dataByte >> bit) & 1U;
779 dst->exactStepsRequested = bitValue != 0;
780 bit_offset = bit_offset + 1;
781 } while(false);
782
783 do {
784 int8_t b;
785 for (b = (8 - 1); b >= 0; b--) {
786 do {
787 uint16_t byte = bit_offset / 8;
788 uint16_t bit = 7 - (bit_offset % 8);
789 char dataByte = src[byte];
790 unsigned char bitValue = (dataByte >> bit) & 1U;
791 dst->speed ^= (-bitValue ^ dst->speed) & (1UL << b);
792 bit_offset = bit_offset + 1;
793 } while(false);
794 }
795 } while(false);
796 dst->speed = (dst->speed);
797
798 do {
799 int8_t b;
800 for (b = (8 - 1); b >= 0; b--) {
801 do {
802 uint16_t byte = bit_offset / 8;
803 uint16_t bit = 7 - (bit_offset % 8);
804 char dataByte = src[byte];
805 unsigned char bitValue = (dataByte >> bit) & 1U;
806 dst->odometryResetCounter ^= (-bitValue ^ dst->odometryResetCounter) & (1UL << b);
807 bit_offset = bit_offset + 1;
808 } while(false);
809 }
810 } while(false);
812
813 do {
814 uint16_t byte = bit_offset / 8;
815 uint16_t bit = 7 - (bit_offset % 8);
816 char dataByte = src[byte];
817 unsigned char bitValue = (dataByte >> bit) & 1U;
818 dst->isFast = bitValue != 0;
819 bit_offset = bit_offset + 1;
820 } while(false);
821
822 do {
823 uint16_t byte = bit_offset / 8;
824 uint16_t bit = 7 - (bit_offset % 8);
825 char dataByte = src[byte];
826 unsigned char bitValue = (dataByte >> bit) & 1U;
827 dst->kickWithLeftFoot = bitValue != 0;
828 bit_offset = bit_offset + 1;
829 } while(false);
830
831 do {
832 uint16_t byte = bit_offset / 8;
833 uint16_t bit = 7 - (bit_offset % 8);
834 char dataByte = src[byte];
835 unsigned char bitValue = (dataByte >> bit) & 1U;
836 dst->useShuffle = bitValue != 0;
837 bit_offset = bit_offset + 1;
838 } while(false);
839
840 do {
841 uint16_t byte = bit_offset / 8;
842 uint16_t bit = 7 - (bit_offset % 8);
843 char dataByte = src[byte];
844 unsigned char bitValue = (dataByte >> bit) & 1U;
845 dst->leftArmLimp = bitValue != 0;
846 bit_offset = bit_offset + 1;
847 } while(false);
848
849 do {
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;
854 dst->rightArmLimp = bitValue != 0;
855 bit_offset = bit_offset + 1;
856 } while(false);
857
858 do {
859 int8_t b;
860 for (b = (8 - 1); b >= 0; b--) {
861 do {
862 uint16_t byte = bit_offset / 8;
863 uint16_t bit = 7 - (bit_offset % 8);
864 char dataByte = src[byte];
865 unsigned char bitValue = (dataByte >> bit) & 1U;
866 dst->power ^= (-bitValue ^ dst->power) & (1UL << b);
867 bit_offset = bit_offset + 1;
868 } while(false);
869 }
870 } while(false);
871 dst->power = (dst->power);
872
873 do {
874 int8_t b;
875 for (b = (8 - 1); b >= 0; b--) {
876 do {
877 uint16_t byte = bit_offset / 8;
878 uint16_t bit = 7 - (bit_offset % 8);
879 char dataByte = src[byte];
880 unsigned char bitValue = (dataByte >> bit) & 1U;
881 dst->bend ^= (-bitValue ^ dst->bend) & (1UL << b);
882 bit_offset = bit_offset + 1;
883 } while(false);
884 }
885 } while(false);
886 dst->bend = (dst->bend);
887 //avoid unused variable warnings when you try to use an empty gen file or a gen file with no supported serialisation types.
888 (void)src;
889 (void)dst;
890 return bit_offset;
891}
892
893/*#endif // WHITEBOARD_SERIALISATION*/
WHITEBOARD_POSTER_STRING_CONVERSION.
int8_t turn
[-85 - 85] step-size(mm) per second, limited to +/- 85deg/step
uint8_t power
[0 - 100] stiffness, auto set to minimum needed values.
uint8_t speed
[0 - 100] modifier for forward etc.
bool leftArmLimp
lower stiffness in the arms when walking, allows the arm to move a little more.
bool kickWithLeftFoot
which foot to use for kicking
bool rightArmLimp
lower stiffness in the arms when walking, allows the arm to move a little more.
uint8_t odometryResetCounter
Odometry will reset any time this is changed or incremented.
int16_t forward
[-300 - 300] step-size(mm) per second, limited to +/- 300mm/step
bool useShuffle
limits the step height so the robot 'shuffles' instead of taking larger steps.
bool exactStepsRequested
No ratcheting, no speed 'buildup', just full step sizes.
uint8_t bend
[0 - 1] controls what the robot does when stopped, 0 == STAND and lower stiffness,...
bool walkEngineOn
connects the dcm callbacks.
int16_t left
[-200 - 200] step-size(mm) per second, limited to +/- 200mm/step
size_t wb_nao_walk_command_to_network_serialised(const struct wb_nao_walk_command *self, char *dst)
Convert to a compressed, serialised, network byte order byte stream.
#define htons(x)
const char * wb_nao_walk_command_to_string(const struct wb_nao_walk_command *self, char *toString, size_t bufferSize)
Convert to a string.
const char * wb_nao_walk_command_description(const struct wb_nao_walk_command *self, char *descString, size_t bufferSize)
Convert to a description string.
size_t wb_nao_walk_command_from_network_serialised(const char *src, struct wb_nao_walk_command *dst)
Convert from a compressed, serialised, network byte order byte stream.
#define ntohs(x)
struct wb_nao_walk_command * wb_nao_walk_command_from_string(struct wb_nao_walk_command *self, const char *str)
Convert from a string.
#define NAOWALKCOMMAND_DESC_BUFFER_SIZE