gusimplewhiteboard
wb_vision_control_status.c
Go to the documentation of this file.
1/*
2 * file wb_vision_control_status.c
3 *
4 * This file was generated by classgenerator from vision_control_status.gen.
5 * DO NOT CHANGE MANUALLY!
6 *
7 * Copyright © 2021 Eugene Gilmore. 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 Eugene Gilmore.
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_vision_control_status_description(const struct wb_vision_control_status* 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 switch (self->cameraResolution) {
134 case HD_4VGA:
135 {
136 len += snprintf(descString + len, bufferSize - len, "cameraResolution=HD_4VGA");
137 break;
138 }
139 case QQVGA:
140 {
141 len += snprintf(descString + len, bufferSize - len, "cameraResolution=QQVGA");
142 break;
143 }
144 case QVGA:
145 {
146 len += snprintf(descString + len, bufferSize - len, "cameraResolution=QVGA");
147 break;
148 }
149 case SVGA:
150 {
151 len += snprintf(descString + len, bufferSize - len, "cameraResolution=SVGA");
152 break;
153 }
154 case VGA:
155 {
156 len += snprintf(descString + len, bufferSize - len, "cameraResolution=VGA");
157 break;
158 }
159 }
160 if (len >= bufferSize) {
161 return descString;
162 }
163 len = gu_strlcat(descString, ", ", bufferSize);
164 if (len >= bufferSize) {
165 return descString;
166 }
167 len = gu_strlcat(descString, self->pipelineRunning ? "pipelineRunning=true" : "pipelineRunning=false", bufferSize);
168 if (len >= bufferSize) {
169 return descString;
170 }
171 len = gu_strlcat(descString, ", ", bufferSize);
172 if (len >= bufferSize) {
173 return descString;
174 }
175 switch (self->selectedCamera) {
176 case Bottom:
177 {
178 len += snprintf(descString + len, bufferSize - len, "selectedCamera=Bottom");
179 break;
180 }
182 {
183 len += snprintf(descString + len, bufferSize - len, "selectedCamera=NUM_VISION_CAMERAS");
184 break;
185 }
186 case Top:
187 {
188 len += snprintf(descString + len, bufferSize - len, "selectedCamera=Top");
189 break;
190 }
191 }
192 if (len >= bufferSize) {
193 return descString;
194 }
195 len = gu_strlcat(descString, ", ", bufferSize);
196 if (len >= bufferSize) {
197 return descString;
198 }
199 switch (self->saveImage) {
200 case AI2:
201 {
202 len += snprintf(descString + len, bufferSize - len, "saveImage=AI2");
203 break;
204 }
205 case AI3:
206 {
207 len += snprintf(descString + len, bufferSize - len, "saveImage=AI3");
208 break;
209 }
210 case JPG:
211 {
212 len += snprintf(descString + len, bufferSize - len, "saveImage=JPG");
213 break;
214 }
215 case None:
216 {
217 len += snprintf(descString + len, bufferSize - len, "saveImage=None");
218 break;
219 }
220 }
221 if (len >= bufferSize) {
222 return descString;
223 }
224 len = gu_strlcat(descString, ", ", bufferSize);
225 if (len >= bufferSize) {
226 return descString;
227 }
228 len = gu_strlcat(descString, self->saveClassifiedImage ? "saveClassifiedImage=true" : "saveClassifiedImage=false", bufferSize);
229 if (len >= bufferSize) {
230 return descString;
231 }
232 len = gu_strlcat(descString, ", ", bufferSize);
233 if (len >= bufferSize) {
234 return descString;
235 }
236 switch (self->pipeline) {
237 case HTWK:
238 {
239 len += snprintf(descString + len, bufferSize - len, "pipeline=HTWK");
240 break;
241 }
242 case Neural_Network:
243 {
244 len += snprintf(descString + len, bufferSize - len, "pipeline=Neural_Network");
245 break;
246 }
247 case OpenCVFaces:
248 {
249 len += snprintf(descString + len, bufferSize - len, "pipeline=OpenCVFaces");
250 break;
251 }
252 case OpenChallenge:
253 {
254 len += snprintf(descString + len, bufferSize - len, "pipeline=OpenChallenge");
255 break;
256 }
257 case Soccer:
258 {
259 len += snprintf(descString + len, bufferSize - len, "pipeline=Soccer");
260 break;
261 }
262 case Streaming:
263 {
264 len += snprintf(descString + len, bufferSize - len, "pipeline=Streaming");
265 break;
266 }
267 }
268 if (len >= bufferSize) {
269 return descString;
270 }
271 len = gu_strlcat(descString, ", ", bufferSize);
272 if (len >= bufferSize) {
273 return descString;
274 }
275 len += snprintf(descString + len, bufferSize - len, "chooseCamera=%d", self->chooseCamera);
276 if (len >= bufferSize) {
277 return descString;
278 }
279 len = gu_strlcat(descString, ", ", bufferSize);
280 if (len >= bufferSize) {
281 return descString;
282 }
283 len += snprintf(descString + len, bufferSize - len, "confidence=%lf", (double) self->confidence);
284 if (len >= bufferSize) {
285 return descString;
286 }
287 len = gu_strlcat(descString, ", ", bufferSize);
288 if (len >= bufferSize) {
289 return descString;
290 }
291 switch (self->networkTop) {
292 case BallOnly:
293 {
294 len += snprintf(descString + len, bufferSize - len, "networkTop=BallOnly");
295 break;
296 }
297 case VGANet:
298 {
299 len += snprintf(descString + len, bufferSize - len, "networkTop=VGANet");
300 break;
301 }
302 case Vanilla:
303 {
304 len += snprintf(descString + len, bufferSize - len, "networkTop=Vanilla");
305 break;
306 }
307 case v2:
308 {
309 len += snprintf(descString + len, bufferSize - len, "networkTop=v2");
310 break;
311 }
312 }
313 if (len >= bufferSize) {
314 return descString;
315 }
316 len = gu_strlcat(descString, ", ", bufferSize);
317 if (len >= bufferSize) {
318 return descString;
319 }
320 switch (self->networkBottom) {
321 case BallOnly:
322 {
323 len += snprintf(descString + len, bufferSize - len, "networkBottom=BallOnly");
324 break;
325 }
326 case VGANet:
327 {
328 len += snprintf(descString + len, bufferSize - len, "networkBottom=VGANet");
329 break;
330 }
331 case Vanilla:
332 {
333 len += snprintf(descString + len, bufferSize - len, "networkBottom=Vanilla");
334 break;
335 }
336 case v2:
337 {
338 len += snprintf(descString + len, bufferSize - len, "networkBottom=v2");
339 break;
340 }
341 }
342 if (len >= bufferSize) {
343 return descString;
344 }
345 len = gu_strlcat(descString, ", ", bufferSize);
346 if (len >= bufferSize) {
347 return descString;
348 }
349 switch (self->streamingSource) {
350 case Classified:
351 {
352 len += snprintf(descString + len, bufferSize - len, "streamingSource=Classified");
353 break;
354 }
355 case Normal:
356 {
357 len += snprintf(descString + len, bufferSize - len, "streamingSource=Normal");
358 break;
359 }
360 case Recognized:
361 {
362 len += snprintf(descString + len, bufferSize - len, "streamingSource=Recognized");
363 break;
364 }
365 }
366 if (len >= bufferSize) {
367 return descString;
368 }
369 len = gu_strlcat(descString, ", ", bufferSize);
370 if (len >= bufferSize) {
371 return descString;
372 }
373 len = gu_strlcat(descString, self->imageInput ? "imageInput=true" : "imageInput=false", bufferSize);
374 if (len >= bufferSize) {
375 return descString;
376 }
377 len = gu_strlcat(descString, ", ", bufferSize);
378 if (len >= bufferSize) {
379 return descString;
380 }
381 len += snprintf(descString + len, bufferSize - len, "jpegStreamQuality=%d", self->jpegStreamQuality);
382 if (len >= bufferSize) {
383 return descString;
384 }
385 len = gu_strlcat(descString, ", ", bufferSize);
386 if (len >= bufferSize) {
387 return descString;
388 }
389 len += snprintf(descString + len, bufferSize - len, "jpegStreamStride=%d", self->jpegStreamStride);
390 if (len >= bufferSize) {
391 return descString;
392 }
393 len = gu_strlcat(descString, ", ", bufferSize);
394 if (len >= bufferSize) {
395 return descString;
396 }
397 len += snprintf(descString + len, bufferSize - len, "frameRate=%d", self->frameRate);
398 if (len >= bufferSize) {
399 return descString;
400 }
401 len = gu_strlcat(descString, ", ", bufferSize);
402 if (len >= bufferSize) {
403 return descString;
404 }
405 len = gu_strlcat(descString, self->runPipelineOnce ? "runPipelineOnce=true" : "runPipelineOnce=false", bufferSize);
406 if (len >= bufferSize) {
407 return descString;
408 }
409 len = gu_strlcat(descString, ", ", bufferSize);
410 if (len >= bufferSize) {
411 return descString;
412 }
413#ifdef __APPLE__
414 len += snprintf(descString + len, bufferSize - len, "frameNumber=%llu", self->frameNumber);
415#else
416 len += snprintf(descString + len, bufferSize - len, "frameNumber=%lu", self->frameNumber);
417#endif
418 if (len >= bufferSize) {
419 return descString;
420 }
421 len = gu_strlcat(descString, ", ", bufferSize);
422 if (len >= bufferSize) {
423 return descString;
424 }
425 len += snprintf(descString + len, bufferSize - len, "colourCalibration=%s", self->colourCalibration);
426 return descString;
427#pragma clang diagnostic pop
428}
429
433const char* wb_vision_control_status_to_string(const struct wb_vision_control_status* self, char* toString, size_t bufferSize)
434{
435#pragma clang diagnostic push
436#pragma clang diagnostic ignored "-Wunused-variable"
437 size_t len = 0;
438 if (len >= bufferSize) {
439 return toString;
440 }
441 switch (self->cameraResolution) {
442 case HD_4VGA:
443 {
444 len += snprintf(toString + len, bufferSize - len, "HD_4VGA");
445 break;
446 }
447 case QQVGA:
448 {
449 len += snprintf(toString + len, bufferSize - len, "QQVGA");
450 break;
451 }
452 case QVGA:
453 {
454 len += snprintf(toString + len, bufferSize - len, "QVGA");
455 break;
456 }
457 case SVGA:
458 {
459 len += snprintf(toString + len, bufferSize - len, "SVGA");
460 break;
461 }
462 case VGA:
463 {
464 len += snprintf(toString + len, bufferSize - len, "VGA");
465 break;
466 }
467 }
468 if (len >= bufferSize) {
469 return toString;
470 }
471 len = gu_strlcat(toString, ", ", bufferSize);
472 if (len >= bufferSize) {
473 return toString;
474 }
475 len = gu_strlcat(toString, self->pipelineRunning ? "true" : "false", bufferSize);
476 if (len >= bufferSize) {
477 return toString;
478 }
479 len = gu_strlcat(toString, ", ", bufferSize);
480 if (len >= bufferSize) {
481 return toString;
482 }
483 switch (self->selectedCamera) {
484 case Bottom:
485 {
486 len += snprintf(toString + len, bufferSize - len, "Bottom");
487 break;
488 }
490 {
491 len += snprintf(toString + len, bufferSize - len, "NUM_VISION_CAMERAS");
492 break;
493 }
494 case Top:
495 {
496 len += snprintf(toString + len, bufferSize - len, "Top");
497 break;
498 }
499 }
500 if (len >= bufferSize) {
501 return toString;
502 }
503 len = gu_strlcat(toString, ", ", bufferSize);
504 if (len >= bufferSize) {
505 return toString;
506 }
507 switch (self->saveImage) {
508 case AI2:
509 {
510 len += snprintf(toString + len, bufferSize - len, "AI2");
511 break;
512 }
513 case AI3:
514 {
515 len += snprintf(toString + len, bufferSize - len, "AI3");
516 break;
517 }
518 case JPG:
519 {
520 len += snprintf(toString + len, bufferSize - len, "JPG");
521 break;
522 }
523 case None:
524 {
525 len += snprintf(toString + len, bufferSize - len, "None");
526 break;
527 }
528 }
529 if (len >= bufferSize) {
530 return toString;
531 }
532 len = gu_strlcat(toString, ", ", bufferSize);
533 if (len >= bufferSize) {
534 return toString;
535 }
536 len = gu_strlcat(toString, self->saveClassifiedImage ? "true" : "false", bufferSize);
537 if (len >= bufferSize) {
538 return toString;
539 }
540 len = gu_strlcat(toString, ", ", bufferSize);
541 if (len >= bufferSize) {
542 return toString;
543 }
544 switch (self->pipeline) {
545 case HTWK:
546 {
547 len += snprintf(toString + len, bufferSize - len, "HTWK");
548 break;
549 }
550 case Neural_Network:
551 {
552 len += snprintf(toString + len, bufferSize - len, "Neural_Network");
553 break;
554 }
555 case OpenCVFaces:
556 {
557 len += snprintf(toString + len, bufferSize - len, "OpenCVFaces");
558 break;
559 }
560 case OpenChallenge:
561 {
562 len += snprintf(toString + len, bufferSize - len, "OpenChallenge");
563 break;
564 }
565 case Soccer:
566 {
567 len += snprintf(toString + len, bufferSize - len, "Soccer");
568 break;
569 }
570 case Streaming:
571 {
572 len += snprintf(toString + len, bufferSize - len, "Streaming");
573 break;
574 }
575 }
576 if (len >= bufferSize) {
577 return toString;
578 }
579 len = gu_strlcat(toString, ", ", bufferSize);
580 if (len >= bufferSize) {
581 return toString;
582 }
583 len += snprintf(toString + len, bufferSize - len, "%d", self->chooseCamera);
584 if (len >= bufferSize) {
585 return toString;
586 }
587 len = gu_strlcat(toString, ", ", bufferSize);
588 if (len >= bufferSize) {
589 return toString;
590 }
591 len += snprintf(toString + len, bufferSize - len, "%lf", (double) self->confidence);
592 if (len >= bufferSize) {
593 return toString;
594 }
595 len = gu_strlcat(toString, ", ", bufferSize);
596 if (len >= bufferSize) {
597 return toString;
598 }
599 switch (self->networkTop) {
600 case BallOnly:
601 {
602 len += snprintf(toString + len, bufferSize - len, "BallOnly");
603 break;
604 }
605 case VGANet:
606 {
607 len += snprintf(toString + len, bufferSize - len, "VGANet");
608 break;
609 }
610 case Vanilla:
611 {
612 len += snprintf(toString + len, bufferSize - len, "Vanilla");
613 break;
614 }
615 case v2:
616 {
617 len += snprintf(toString + len, bufferSize - len, "v2");
618 break;
619 }
620 }
621 if (len >= bufferSize) {
622 return toString;
623 }
624 len = gu_strlcat(toString, ", ", bufferSize);
625 if (len >= bufferSize) {
626 return toString;
627 }
628 switch (self->networkBottom) {
629 case BallOnly:
630 {
631 len += snprintf(toString + len, bufferSize - len, "BallOnly");
632 break;
633 }
634 case VGANet:
635 {
636 len += snprintf(toString + len, bufferSize - len, "VGANet");
637 break;
638 }
639 case Vanilla:
640 {
641 len += snprintf(toString + len, bufferSize - len, "Vanilla");
642 break;
643 }
644 case v2:
645 {
646 len += snprintf(toString + len, bufferSize - len, "v2");
647 break;
648 }
649 }
650 if (len >= bufferSize) {
651 return toString;
652 }
653 len = gu_strlcat(toString, ", ", bufferSize);
654 if (len >= bufferSize) {
655 return toString;
656 }
657 switch (self->streamingSource) {
658 case Classified:
659 {
660 len += snprintf(toString + len, bufferSize - len, "Classified");
661 break;
662 }
663 case Normal:
664 {
665 len += snprintf(toString + len, bufferSize - len, "Normal");
666 break;
667 }
668 case Recognized:
669 {
670 len += snprintf(toString + len, bufferSize - len, "Recognized");
671 break;
672 }
673 }
674 if (len >= bufferSize) {
675 return toString;
676 }
677 len = gu_strlcat(toString, ", ", bufferSize);
678 if (len >= bufferSize) {
679 return toString;
680 }
681 len = gu_strlcat(toString, self->imageInput ? "true" : "false", bufferSize);
682 if (len >= bufferSize) {
683 return toString;
684 }
685 len = gu_strlcat(toString, ", ", bufferSize);
686 if (len >= bufferSize) {
687 return toString;
688 }
689 len += snprintf(toString + len, bufferSize - len, "%d", self->jpegStreamQuality);
690 if (len >= bufferSize) {
691 return toString;
692 }
693 len = gu_strlcat(toString, ", ", bufferSize);
694 if (len >= bufferSize) {
695 return toString;
696 }
697 len += snprintf(toString + len, bufferSize - len, "%d", self->jpegStreamStride);
698 if (len >= bufferSize) {
699 return toString;
700 }
701 len = gu_strlcat(toString, ", ", bufferSize);
702 if (len >= bufferSize) {
703 return toString;
704 }
705 len += snprintf(toString + len, bufferSize - len, "%d", self->frameRate);
706 if (len >= bufferSize) {
707 return toString;
708 }
709 len = gu_strlcat(toString, ", ", bufferSize);
710 if (len >= bufferSize) {
711 return toString;
712 }
713 len = gu_strlcat(toString, self->runPipelineOnce ? "true" : "false", bufferSize);
714 if (len >= bufferSize) {
715 return toString;
716 }
717 len = gu_strlcat(toString, ", ", bufferSize);
718 if (len >= bufferSize) {
719 return toString;
720 }
721#ifdef __APPLE__
722 len += snprintf(toString + len, bufferSize - len, "%llu", self->frameNumber);
723#else
724 len += snprintf(toString + len, bufferSize - len, "%lu", self->frameNumber);
725#endif
726 if (len >= bufferSize) {
727 return toString;
728 }
729 len = gu_strlcat(toString, ", ", bufferSize);
730 if (len >= bufferSize) {
731 return toString;
732 }
733 len += snprintf(toString + len, bufferSize - len, "%s", self->colourCalibration);
734 return toString;
735#pragma clang diagnostic pop
736}
737
742{
743 size_t temp_length = strlen(str);
744 int length = (temp_length <= INT_MAX) ? ((int)((ssize_t)temp_length)) : -1;
745 if (length < 1 || length > VISION_CONTROL_STATUS_DESC_BUFFER_SIZE) {
746 return self;
747 }
748 char var_str_buffer[VISION_CONTROL_STATUS_DESC_BUFFER_SIZE + 1];
749 char* var_str = &var_str_buffer[0];
750 char key_buffer[20];
751 char* key = &key_buffer[0];
752 int bracecount = 0;
753 int startVar = 0;
754 int index = 0;
755 int startKey = 0;
756 int endKey = -1;
757 int varIndex = 0;
758 if (index == 0 && str[0] == '{') {
759 index = 1;
760 }
761 startVar = index;
762 startKey = startVar;
763 do {
764 for (int i = index; i < length; i++) {
765 index = i + 1;
766 if (bracecount == 0 && str[i] == '=') {
767 endKey = i - 1;
768 startVar = index;
769 continue;
770 }
771 if (bracecount == 0 && isspace(str[i])) {
772 startVar = index;
773 if (endKey == -1) {
774 startKey = index;
775 }
776 continue;
777 }
778 if (bracecount == 0 && str[i] == ',') {
779 index = i - 1;
780 break;
781 }
782 if (str[i] == '{') {
783 bracecount++;
784 continue;
785 }
786 if (str[i] == '}') {
787 bracecount--;
788 if (bracecount < 0) {
789 index = i - 1;
790 break;
791 }
792 }
793 if (i == length - 1) {
794 index = i;
795 }
796 }
797 if (endKey >= startKey && endKey - startKey < length) {
798 strncpy(key, str + startKey, ((size_t)(endKey - startKey) + 1));
799 key[(endKey - startKey) + 1] = 0;
800 } else {
801 key[0] = 0;
802 }
803 strncpy(var_str, str + startVar, ((size_t)(index - startVar) + 1));
804 var_str[(index - startVar) + 1] = 0;
805 bracecount = 0;
806 index += 2;
807 startVar = index;
808 startKey = startVar;
809 endKey = -1;
810 if (strlen(key) > 0) {
811 if (0 == strcmp("cameraResolution", key)) {
812 varIndex = 0;
813 } else if (0 == strcmp("pipelineRunning", key)) {
814 varIndex = 1;
815 } else if (0 == strcmp("selectedCamera", key)) {
816 varIndex = 2;
817 } else if (0 == strcmp("saveImage", key)) {
818 varIndex = 3;
819 } else if (0 == strcmp("saveClassifiedImage", key)) {
820 varIndex = 4;
821 } else if (0 == strcmp("pipeline", key)) {
822 varIndex = 5;
823 } else if (0 == strcmp("chooseCamera", key)) {
824 varIndex = 6;
825 } else if (0 == strcmp("confidence", key)) {
826 varIndex = 7;
827 } else if (0 == strcmp("networkTop", key)) {
828 varIndex = 8;
829 } else if (0 == strcmp("networkBottom", key)) {
830 varIndex = 9;
831 } else if (0 == strcmp("streamingSource", key)) {
832 varIndex = 10;
833 } else if (0 == strcmp("imageInput", key)) {
834 varIndex = 11;
835 } else if (0 == strcmp("jpegStreamQuality", key)) {
836 varIndex = 12;
837 } else if (0 == strcmp("jpegStreamStride", key)) {
838 varIndex = 13;
839 } else if (0 == strcmp("frameRate", key)) {
840 varIndex = 14;
841 } else if (0 == strcmp("runPipelineOnce", key)) {
842 varIndex = 15;
843 } else if (0 == strcmp("frameNumber", key)) {
844 varIndex = 16;
845 } else if (0 == strcmp("colourCalibration", key)) {
846 varIndex = 17;
847 } else {
848 varIndex = -1;
849 }
850 }
851 switch (varIndex) {
852 case -1: { break; }
853 case 0:
854 {
855 if (strcmp("HD_4VGA", var_str) == 0) {
856#pragma clang diagnostic push
857#pragma clang diagnostic ignored "-Wbad-function-cast"
858 self->cameraResolution = HD_4VGA;
859#pragma clang diagnostic pop
860 } else if (strcmp("QQVGA", var_str) == 0) {
861#pragma clang diagnostic push
862#pragma clang diagnostic ignored "-Wbad-function-cast"
863 self->cameraResolution = QQVGA;
864#pragma clang diagnostic pop
865 } else if (strcmp("QVGA", var_str) == 0) {
866#pragma clang diagnostic push
867#pragma clang diagnostic ignored "-Wbad-function-cast"
868 self->cameraResolution = QVGA;
869#pragma clang diagnostic pop
870 } else if (strcmp("SVGA", var_str) == 0) {
871#pragma clang diagnostic push
872#pragma clang diagnostic ignored "-Wbad-function-cast"
873 self->cameraResolution = SVGA;
874#pragma clang diagnostic pop
875 } else if (strcmp("VGA", var_str) == 0) {
876#pragma clang diagnostic push
877#pragma clang diagnostic ignored "-Wbad-function-cast"
878 self->cameraResolution = VGA;
879#pragma clang diagnostic pop
880 } else {
881#pragma clang diagnostic push
882#pragma clang diagnostic ignored "-Wbad-function-cast"
883 self->cameraResolution = ((enum Resolutions)atoi(var_str));
884#pragma clang diagnostic pop
885 }
886 break;
887 }
888 case 1:
889 {
890 self->pipelineRunning = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
891 break;
892 }
893 case 2:
894 {
895 if (strcmp("Bottom", var_str) == 0) {
896#pragma clang diagnostic push
897#pragma clang diagnostic ignored "-Wbad-function-cast"
898 self->selectedCamera = Bottom;
899#pragma clang diagnostic pop
900 } else if (strcmp("NUM_VISION_CAMERAS", var_str) == 0) {
901#pragma clang diagnostic push
902#pragma clang diagnostic ignored "-Wbad-function-cast"
903 self->selectedCamera = NUM_VISION_CAMERAS;
904#pragma clang diagnostic pop
905 } else if (strcmp("Top", var_str) == 0) {
906#pragma clang diagnostic push
907#pragma clang diagnostic ignored "-Wbad-function-cast"
908 self->selectedCamera = Top;
909#pragma clang diagnostic pop
910 } else {
911#pragma clang diagnostic push
912#pragma clang diagnostic ignored "-Wbad-function-cast"
913 self->selectedCamera = ((enum VisionCamera)atoi(var_str));
914#pragma clang diagnostic pop
915 }
916 break;
917 }
918 case 3:
919 {
920 if (strcmp("AI2", var_str) == 0) {
921#pragma clang diagnostic push
922#pragma clang diagnostic ignored "-Wbad-function-cast"
923 self->saveImage = AI2;
924#pragma clang diagnostic pop
925 } else if (strcmp("AI3", var_str) == 0) {
926#pragma clang diagnostic push
927#pragma clang diagnostic ignored "-Wbad-function-cast"
928 self->saveImage = AI3;
929#pragma clang diagnostic pop
930 } else if (strcmp("JPG", var_str) == 0) {
931#pragma clang diagnostic push
932#pragma clang diagnostic ignored "-Wbad-function-cast"
933 self->saveImage = JPG;
934#pragma clang diagnostic pop
935 } else if (strcmp("None", var_str) == 0) {
936#pragma clang diagnostic push
937#pragma clang diagnostic ignored "-Wbad-function-cast"
938 self->saveImage = None;
939#pragma clang diagnostic pop
940 } else {
941#pragma clang diagnostic push
942#pragma clang diagnostic ignored "-Wbad-function-cast"
943 self->saveImage = ((enum SaveFileType)atoi(var_str));
944#pragma clang diagnostic pop
945 }
946 break;
947 }
948 case 4:
949 {
950 self->saveClassifiedImage = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
951 break;
952 }
953 case 5:
954 {
955 if (strcmp("HTWK", var_str) == 0) {
956#pragma clang diagnostic push
957#pragma clang diagnostic ignored "-Wbad-function-cast"
958 self->pipeline = HTWK;
959#pragma clang diagnostic pop
960 } else if (strcmp("Neural_Network", var_str) == 0) {
961#pragma clang diagnostic push
962#pragma clang diagnostic ignored "-Wbad-function-cast"
963 self->pipeline = Neural_Network;
964#pragma clang diagnostic pop
965 } else if (strcmp("OpenCVFaces", var_str) == 0) {
966#pragma clang diagnostic push
967#pragma clang diagnostic ignored "-Wbad-function-cast"
968 self->pipeline = OpenCVFaces;
969#pragma clang diagnostic pop
970 } else if (strcmp("OpenChallenge", var_str) == 0) {
971#pragma clang diagnostic push
972#pragma clang diagnostic ignored "-Wbad-function-cast"
973 self->pipeline = OpenChallenge;
974#pragma clang diagnostic pop
975 } else if (strcmp("Soccer", var_str) == 0) {
976#pragma clang diagnostic push
977#pragma clang diagnostic ignored "-Wbad-function-cast"
978 self->pipeline = Soccer;
979#pragma clang diagnostic pop
980 } else if (strcmp("Streaming", var_str) == 0) {
981#pragma clang diagnostic push
982#pragma clang diagnostic ignored "-Wbad-function-cast"
983 self->pipeline = Streaming;
984#pragma clang diagnostic pop
985 } else {
986#pragma clang diagnostic push
987#pragma clang diagnostic ignored "-Wbad-function-cast"
988 self->pipeline = ((enum NamedPipeline)atoi(var_str));
989#pragma clang diagnostic pop
990 }
991 break;
992 }
993 case 6:
994 {
995 self->chooseCamera = ((int)atoi(var_str));
996 break;
997 }
998 case 7:
999 {
1000 self->confidence = ((float)atof(var_str));
1001 break;
1002 }
1003 case 8:
1004 {
1005 if (strcmp("BallOnly", var_str) == 0) {
1006#pragma clang diagnostic push
1007#pragma clang diagnostic ignored "-Wbad-function-cast"
1008 self->networkTop = BallOnly;
1009#pragma clang diagnostic pop
1010 } else if (strcmp("VGANet", var_str) == 0) {
1011#pragma clang diagnostic push
1012#pragma clang diagnostic ignored "-Wbad-function-cast"
1013 self->networkTop = VGANet;
1014#pragma clang diagnostic pop
1015 } else if (strcmp("Vanilla", var_str) == 0) {
1016#pragma clang diagnostic push
1017#pragma clang diagnostic ignored "-Wbad-function-cast"
1018 self->networkTop = Vanilla;
1019#pragma clang diagnostic pop
1020 } else if (strcmp("v2", var_str) == 0) {
1021#pragma clang diagnostic push
1022#pragma clang diagnostic ignored "-Wbad-function-cast"
1023 self->networkTop = v2;
1024#pragma clang diagnostic pop
1025 } else {
1026#pragma clang diagnostic push
1027#pragma clang diagnostic ignored "-Wbad-function-cast"
1028 self->networkTop = ((enum NeuralNetworkType)atoi(var_str));
1029#pragma clang diagnostic pop
1030 }
1031 break;
1032 }
1033 case 9:
1034 {
1035 if (strcmp("BallOnly", var_str) == 0) {
1036#pragma clang diagnostic push
1037#pragma clang diagnostic ignored "-Wbad-function-cast"
1038 self->networkBottom = BallOnly;
1039#pragma clang diagnostic pop
1040 } else if (strcmp("VGANet", var_str) == 0) {
1041#pragma clang diagnostic push
1042#pragma clang diagnostic ignored "-Wbad-function-cast"
1043 self->networkBottom = VGANet;
1044#pragma clang diagnostic pop
1045 } else if (strcmp("Vanilla", var_str) == 0) {
1046#pragma clang diagnostic push
1047#pragma clang diagnostic ignored "-Wbad-function-cast"
1048 self->networkBottom = Vanilla;
1049#pragma clang diagnostic pop
1050 } else if (strcmp("v2", var_str) == 0) {
1051#pragma clang diagnostic push
1052#pragma clang diagnostic ignored "-Wbad-function-cast"
1053 self->networkBottom = v2;
1054#pragma clang diagnostic pop
1055 } else {
1056#pragma clang diagnostic push
1057#pragma clang diagnostic ignored "-Wbad-function-cast"
1058 self->networkBottom = ((enum NeuralNetworkType)atoi(var_str));
1059#pragma clang diagnostic pop
1060 }
1061 break;
1062 }
1063 case 10:
1064 {
1065 if (strcmp("Classified", var_str) == 0) {
1066#pragma clang diagnostic push
1067#pragma clang diagnostic ignored "-Wbad-function-cast"
1068 self->streamingSource = Classified;
1069#pragma clang diagnostic pop
1070 } else if (strcmp("Normal", var_str) == 0) {
1071#pragma clang diagnostic push
1072#pragma clang diagnostic ignored "-Wbad-function-cast"
1073 self->streamingSource = Normal;
1074#pragma clang diagnostic pop
1075 } else if (strcmp("Recognized", var_str) == 0) {
1076#pragma clang diagnostic push
1077#pragma clang diagnostic ignored "-Wbad-function-cast"
1078 self->streamingSource = Recognized;
1079#pragma clang diagnostic pop
1080 } else {
1081#pragma clang diagnostic push
1082#pragma clang diagnostic ignored "-Wbad-function-cast"
1083 self->streamingSource = ((enum StreamingType)atoi(var_str));
1084#pragma clang diagnostic pop
1085 }
1086 break;
1087 }
1088 case 11:
1089 {
1090 self->imageInput = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
1091 break;
1092 }
1093 case 12:
1094 {
1095 self->jpegStreamQuality = ((int)atoi(var_str));
1096 break;
1097 }
1098 case 13:
1099 {
1100 self->jpegStreamStride = ((int)atoi(var_str));
1101 break;
1102 }
1103 case 14:
1104 {
1105 self->frameRate = ((int)atoi(var_str));
1106 break;
1107 }
1108 case 15:
1109 {
1110 self->runPipelineOnce = strcmp(var_str, "true") == 0 || strcmp(var_str, "1") == 0;
1111 break;
1112 }
1113 case 16:
1114 {
1115#ifdef __APPLE__
1116 self->frameNumber = ((uint64_t)atoll(var_str));
1117#else
1118 self->frameNumber = ((uint64_t)atol(var_str));
1119#endif
1120 break;
1121 }
1122 case 17:
1123 {
1124 strncpy(self->colourCalibration, var_str, 10);
1125 break;
1126 }
1127 }
1128 if (varIndex >= 0) {
1129 varIndex++;
1130 }
1131 } while(index < length);
1132 return self;
1133}
1134
1135/*#ifdef WHITEBOARD_SERIALISATION*/
1136
1141{
1142 uint16_t bit_offset = 0;
1143 enum Resolutions cameraResolution_nbo = htonl(self->cameraResolution);
1144 do {
1145 int8_t b;
1146 for (b = (32 - 1); b >= 0; b--) {
1147 do {
1148 uint16_t byte = bit_offset / 8;
1149 uint16_t bit = 7 - (bit_offset % 8);
1150 unsigned long newbit = !!((cameraResolution_nbo >> b) & 1U);
1151 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1152 bit_offset = bit_offset + 1;
1153 } while(false);
1154 }
1155 } while(false);
1156
1157 do {
1158 uint16_t byte = bit_offset / 8;
1159 uint16_t bit = 7 - (bit_offset % 8);
1160 unsigned long newbit = !!(self->pipelineRunning ? 1U : 0U);
1161 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1162 bit_offset = bit_offset + 1;
1163 } while(false);
1164
1165 enum VisionCamera selectedCamera_nbo = htonl(self->selectedCamera);
1166 do {
1167 int8_t b;
1168 for (b = (32 - 1); b >= 0; b--) {
1169 do {
1170 uint16_t byte = bit_offset / 8;
1171 uint16_t bit = 7 - (bit_offset % 8);
1172 unsigned long newbit = !!((selectedCamera_nbo >> b) & 1U);
1173 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1174 bit_offset = bit_offset + 1;
1175 } while(false);
1176 }
1177 } while(false);
1178
1179 enum SaveFileType saveImage_nbo = htonl(self->saveImage);
1180 do {
1181 int8_t b;
1182 for (b = (32 - 1); b >= 0; b--) {
1183 do {
1184 uint16_t byte = bit_offset / 8;
1185 uint16_t bit = 7 - (bit_offset % 8);
1186 unsigned long newbit = !!((saveImage_nbo >> b) & 1U);
1187 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1188 bit_offset = bit_offset + 1;
1189 } while(false);
1190 }
1191 } while(false);
1192
1193 do {
1194 uint16_t byte = bit_offset / 8;
1195 uint16_t bit = 7 - (bit_offset % 8);
1196 unsigned long newbit = !!(self->saveClassifiedImage ? 1U : 0U);
1197 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1198 bit_offset = bit_offset + 1;
1199 } while(false);
1200
1201 enum NamedPipeline pipeline_nbo = htonl(self->pipeline);
1202 do {
1203 int8_t b;
1204 for (b = (32 - 1); b >= 0; b--) {
1205 do {
1206 uint16_t byte = bit_offset / 8;
1207 uint16_t bit = 7 - (bit_offset % 8);
1208 unsigned long newbit = !!((pipeline_nbo >> b) & 1U);
1209 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1210 bit_offset = bit_offset + 1;
1211 } while(false);
1212 }
1213 } while(false);
1214
1215 int chooseCamera_nbo = htonl(self->chooseCamera);
1216 do {
1217 int8_t b;
1218 for (b = (32 - 1); b >= 0; b--) {
1219 do {
1220 uint16_t byte = bit_offset / 8;
1221 uint16_t bit = 7 - (bit_offset % 8);
1222 unsigned long newbit = !!((chooseCamera_nbo >> b) & 1U);
1223 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1224 bit_offset = bit_offset + 1;
1225 } while(false);
1226 }
1227 } while(false);
1228
1229 //The class generator does not support float types for network conversion.
1230
1231 enum NeuralNetworkType networkTop_nbo = htonl(self->networkTop);
1232 do {
1233 int8_t b;
1234 for (b = (32 - 1); b >= 0; b--) {
1235 do {
1236 uint16_t byte = bit_offset / 8;
1237 uint16_t bit = 7 - (bit_offset % 8);
1238 unsigned long newbit = !!((networkTop_nbo >> b) & 1U);
1239 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1240 bit_offset = bit_offset + 1;
1241 } while(false);
1242 }
1243 } while(false);
1244
1245 enum NeuralNetworkType networkBottom_nbo = htonl(self->networkBottom);
1246 do {
1247 int8_t b;
1248 for (b = (32 - 1); b >= 0; b--) {
1249 do {
1250 uint16_t byte = bit_offset / 8;
1251 uint16_t bit = 7 - (bit_offset % 8);
1252 unsigned long newbit = !!((networkBottom_nbo >> b) & 1U);
1253 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1254 bit_offset = bit_offset + 1;
1255 } while(false);
1256 }
1257 } while(false);
1258
1259 enum StreamingType streamingSource_nbo = htonl(self->streamingSource);
1260 do {
1261 int8_t b;
1262 for (b = (32 - 1); b >= 0; b--) {
1263 do {
1264 uint16_t byte = bit_offset / 8;
1265 uint16_t bit = 7 - (bit_offset % 8);
1266 unsigned long newbit = !!((streamingSource_nbo >> b) & 1U);
1267 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1268 bit_offset = bit_offset + 1;
1269 } while(false);
1270 }
1271 } while(false);
1272
1273 do {
1274 uint16_t byte = bit_offset / 8;
1275 uint16_t bit = 7 - (bit_offset % 8);
1276 unsigned long newbit = !!(self->imageInput ? 1U : 0U);
1277 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1278 bit_offset = bit_offset + 1;
1279 } while(false);
1280
1281 int jpegStreamQuality_nbo = htonl(self->jpegStreamQuality);
1282 do {
1283 int8_t b;
1284 for (b = (32 - 1); b >= 0; b--) {
1285 do {
1286 uint16_t byte = bit_offset / 8;
1287 uint16_t bit = 7 - (bit_offset % 8);
1288 unsigned long newbit = !!((jpegStreamQuality_nbo >> b) & 1U);
1289 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1290 bit_offset = bit_offset + 1;
1291 } while(false);
1292 }
1293 } while(false);
1294
1295 int jpegStreamStride_nbo = htonl(self->jpegStreamStride);
1296 do {
1297 int8_t b;
1298 for (b = (32 - 1); b >= 0; b--) {
1299 do {
1300 uint16_t byte = bit_offset / 8;
1301 uint16_t bit = 7 - (bit_offset % 8);
1302 unsigned long newbit = !!((jpegStreamStride_nbo >> b) & 1U);
1303 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1304 bit_offset = bit_offset + 1;
1305 } while(false);
1306 }
1307 } while(false);
1308
1309 int frameRate_nbo = htonl(self->frameRate);
1310 do {
1311 int8_t b;
1312 for (b = (32 - 1); b >= 0; b--) {
1313 do {
1314 uint16_t byte = bit_offset / 8;
1315 uint16_t bit = 7 - (bit_offset % 8);
1316 unsigned long newbit = !!((frameRate_nbo >> b) & 1U);
1317 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1318 bit_offset = bit_offset + 1;
1319 } while(false);
1320 }
1321 } while(false);
1322
1323 do {
1324 uint16_t byte = bit_offset / 8;
1325 uint16_t bit = 7 - (bit_offset % 8);
1326 unsigned long newbit = !!(self->runPipelineOnce ? 1U : 0U);
1327 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1328 bit_offset = bit_offset + 1;
1329 } while(false);
1330
1331 uint64_t frameNumber_nbo = htonll(self->frameNumber);
1332 do {
1333 int8_t b;
1334 for (b = (64 - 1); b >= 0; b--) {
1335 do {
1336 uint16_t byte = bit_offset / 8;
1337 uint16_t bit = 7 - (bit_offset % 8);
1338 unsigned long newbit = !!((frameNumber_nbo >> b) & 1U);
1339 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1340 bit_offset = bit_offset + 1;
1341 } while(false);
1342 }
1343 } while(false);
1344
1345 do { //limit declaration scope
1346 uint8_t len = (uint8_t) strlen(self->colourCalibration);
1347 int8_t b;
1348 for (b = 7; b >= 0; b--) {
1349 do {
1350 uint16_t byte = bit_offset / 8;
1351 uint16_t bit = 7 - (bit_offset % 8);
1352 unsigned long newbit = !!((len >> b) & 1U);
1353 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1354 bit_offset = bit_offset + 1;
1355 } while(false);
1356 }
1357 uint8_t c;
1358 for (c = 0; c < len; c++) {
1359 for (b = 7; b >= 0; b--) {
1360 do {
1361 uint16_t byte = bit_offset / 8;
1362 uint16_t bit = 7 - (bit_offset % 8);
1363 unsigned long newbit = !!((self->colourCalibration[c] >> b) & 1U);
1364 dst[byte] ^= (-newbit ^ dst[byte]) & (1UL << bit);
1365 bit_offset = bit_offset + 1;
1366 } while(false);
1367 }
1368 }
1369 } while(false);
1370 //avoid unused variable warnings when you try to use an empty gen file or a gen file with no supported serialisation types.
1371 (void)self;
1372 (void)dst;
1373 return bit_offset;
1374}
1375
1380{
1381 uint16_t bit_offset = 0;
1382 do {
1383 int8_t b;
1384 for (b = (32 - 1); b >= 0; b--) {
1385 do {
1386 uint16_t byte = bit_offset / 8;
1387 uint16_t bit = 7 - (bit_offset % 8);
1388 char dataByte = src[byte];
1389 unsigned char bitValue = (dataByte >> bit) & 1U;
1390 dst->cameraResolution ^= (-bitValue ^ dst->cameraResolution) & (1UL << b);
1391 bit_offset = bit_offset + 1;
1392 } while(false);
1393 }
1394 } while(false);
1396
1397 do {
1398 uint16_t byte = bit_offset / 8;
1399 uint16_t bit = 7 - (bit_offset % 8);
1400 char dataByte = src[byte];
1401 unsigned char bitValue = (dataByte >> bit) & 1U;
1402 dst->pipelineRunning = bitValue != 0;
1403 bit_offset = bit_offset + 1;
1404 } while(false);
1405
1406 do {
1407 int8_t b;
1408 for (b = (32 - 1); b >= 0; b--) {
1409 do {
1410 uint16_t byte = bit_offset / 8;
1411 uint16_t bit = 7 - (bit_offset % 8);
1412 char dataByte = src[byte];
1413 unsigned char bitValue = (dataByte >> bit) & 1U;
1414 dst->selectedCamera ^= (-bitValue ^ dst->selectedCamera) & (1UL << b);
1415 bit_offset = bit_offset + 1;
1416 } while(false);
1417 }
1418 } while(false);
1419 dst->selectedCamera = ntohl(dst->selectedCamera);
1420
1421 do {
1422 int8_t b;
1423 for (b = (32 - 1); b >= 0; b--) {
1424 do {
1425 uint16_t byte = bit_offset / 8;
1426 uint16_t bit = 7 - (bit_offset % 8);
1427 char dataByte = src[byte];
1428 unsigned char bitValue = (dataByte >> bit) & 1U;
1429 dst->saveImage ^= (-bitValue ^ dst->saveImage) & (1UL << b);
1430 bit_offset = bit_offset + 1;
1431 } while(false);
1432 }
1433 } while(false);
1434 dst->saveImage = ntohl(dst->saveImage);
1435
1436 do {
1437 uint16_t byte = bit_offset / 8;
1438 uint16_t bit = 7 - (bit_offset % 8);
1439 char dataByte = src[byte];
1440 unsigned char bitValue = (dataByte >> bit) & 1U;
1441 dst->saveClassifiedImage = bitValue != 0;
1442 bit_offset = bit_offset + 1;
1443 } while(false);
1444
1445 do {
1446 int8_t b;
1447 for (b = (32 - 1); b >= 0; b--) {
1448 do {
1449 uint16_t byte = bit_offset / 8;
1450 uint16_t bit = 7 - (bit_offset % 8);
1451 char dataByte = src[byte];
1452 unsigned char bitValue = (dataByte >> bit) & 1U;
1453 dst->pipeline ^= (-bitValue ^ dst->pipeline) & (1UL << b);
1454 bit_offset = bit_offset + 1;
1455 } while(false);
1456 }
1457 } while(false);
1458 dst->pipeline = ntohl(dst->pipeline);
1459
1460 do {
1461 int8_t b;
1462 for (b = (32 - 1); b >= 0; b--) {
1463 do {
1464 uint16_t byte = bit_offset / 8;
1465 uint16_t bit = 7 - (bit_offset % 8);
1466 char dataByte = src[byte];
1467 unsigned char bitValue = (dataByte >> bit) & 1U;
1468 dst->chooseCamera ^= (-bitValue ^ dst->chooseCamera) & (1UL << b);
1469 bit_offset = bit_offset + 1;
1470 } while(false);
1471 }
1472 } while(false);
1473 dst->chooseCamera = ntohl(dst->chooseCamera);
1474
1475 //The class generator does not support float types for network conversion.
1476
1477 do {
1478 int8_t b;
1479 for (b = (32 - 1); b >= 0; b--) {
1480 do {
1481 uint16_t byte = bit_offset / 8;
1482 uint16_t bit = 7 - (bit_offset % 8);
1483 char dataByte = src[byte];
1484 unsigned char bitValue = (dataByte >> bit) & 1U;
1485 dst->networkTop ^= (-bitValue ^ dst->networkTop) & (1UL << b);
1486 bit_offset = bit_offset + 1;
1487 } while(false);
1488 }
1489 } while(false);
1490 dst->networkTop = ntohl(dst->networkTop);
1491
1492 do {
1493 int8_t b;
1494 for (b = (32 - 1); b >= 0; b--) {
1495 do {
1496 uint16_t byte = bit_offset / 8;
1497 uint16_t bit = 7 - (bit_offset % 8);
1498 char dataByte = src[byte];
1499 unsigned char bitValue = (dataByte >> bit) & 1U;
1500 dst->networkBottom ^= (-bitValue ^ dst->networkBottom) & (1UL << b);
1501 bit_offset = bit_offset + 1;
1502 } while(false);
1503 }
1504 } while(false);
1505 dst->networkBottom = ntohl(dst->networkBottom);
1506
1507 do {
1508 int8_t b;
1509 for (b = (32 - 1); b >= 0; b--) {
1510 do {
1511 uint16_t byte = bit_offset / 8;
1512 uint16_t bit = 7 - (bit_offset % 8);
1513 char dataByte = src[byte];
1514 unsigned char bitValue = (dataByte >> bit) & 1U;
1515 dst->streamingSource ^= (-bitValue ^ dst->streamingSource) & (1UL << b);
1516 bit_offset = bit_offset + 1;
1517 } while(false);
1518 }
1519 } while(false);
1521
1522 do {
1523 uint16_t byte = bit_offset / 8;
1524 uint16_t bit = 7 - (bit_offset % 8);
1525 char dataByte = src[byte];
1526 unsigned char bitValue = (dataByte >> bit) & 1U;
1527 dst->imageInput = bitValue != 0;
1528 bit_offset = bit_offset + 1;
1529 } while(false);
1530
1531 do {
1532 int8_t b;
1533 for (b = (32 - 1); b >= 0; b--) {
1534 do {
1535 uint16_t byte = bit_offset / 8;
1536 uint16_t bit = 7 - (bit_offset % 8);
1537 char dataByte = src[byte];
1538 unsigned char bitValue = (dataByte >> bit) & 1U;
1539 dst->jpegStreamQuality ^= (-bitValue ^ dst->jpegStreamQuality) & (1UL << b);
1540 bit_offset = bit_offset + 1;
1541 } while(false);
1542 }
1543 } while(false);
1545
1546 do {
1547 int8_t b;
1548 for (b = (32 - 1); b >= 0; b--) {
1549 do {
1550 uint16_t byte = bit_offset / 8;
1551 uint16_t bit = 7 - (bit_offset % 8);
1552 char dataByte = src[byte];
1553 unsigned char bitValue = (dataByte >> bit) & 1U;
1554 dst->jpegStreamStride ^= (-bitValue ^ dst->jpegStreamStride) & (1UL << b);
1555 bit_offset = bit_offset + 1;
1556 } while(false);
1557 }
1558 } while(false);
1560
1561 do {
1562 int8_t b;
1563 for (b = (32 - 1); b >= 0; b--) {
1564 do {
1565 uint16_t byte = bit_offset / 8;
1566 uint16_t bit = 7 - (bit_offset % 8);
1567 char dataByte = src[byte];
1568 unsigned char bitValue = (dataByte >> bit) & 1U;
1569 dst->frameRate ^= (-bitValue ^ dst->frameRate) & (1UL << b);
1570 bit_offset = bit_offset + 1;
1571 } while(false);
1572 }
1573 } while(false);
1574 dst->frameRate = ntohl(dst->frameRate);
1575
1576 do {
1577 uint16_t byte = bit_offset / 8;
1578 uint16_t bit = 7 - (bit_offset % 8);
1579 char dataByte = src[byte];
1580 unsigned char bitValue = (dataByte >> bit) & 1U;
1581 dst->runPipelineOnce = bitValue != 0;
1582 bit_offset = bit_offset + 1;
1583 } while(false);
1584
1585 do {
1586 int8_t b;
1587 for (b = (64 - 1); b >= 0; b--) {
1588 do {
1589 uint16_t byte = bit_offset / 8;
1590 uint16_t bit = 7 - (bit_offset % 8);
1591 char dataByte = src[byte];
1592 unsigned char bitValue = (dataByte >> bit) & 1U;
1593 dst->frameNumber ^= (-bitValue ^ dst->frameNumber) & (1UL << b);
1594 bit_offset = bit_offset + 1;
1595 } while(false);
1596 }
1597 } while(false);
1598 dst->frameNumber = ntohll(dst->frameNumber);
1599
1600 do {
1601 uint8_t len = 0;
1602 int8_t b;
1603 for (b = 7; b >= 0; b--) {
1604 do {
1605 uint16_t byte = bit_offset / 8;
1606 uint16_t bit = 7 - (bit_offset % 8);
1607 char dataByte = src[byte];
1608 unsigned char bitValue = (dataByte >> bit) & 1U;
1609 len ^= (-bitValue ^ len) & (1UL << b);
1610 bit_offset = bit_offset + 1;
1611 } while(false);
1612 }
1613 uint8_t c;
1614 for (c = 0; c < len; c++) {
1615 for (b = 7; b >= 0; b--) {
1616 do {
1617 uint16_t byte = bit_offset / 8;
1618 uint16_t bit = 7 - (bit_offset % 8);
1619 char dataByte = src[byte];
1620 unsigned char bitValue = (dataByte >> bit) & 1U;
1621 dst->colourCalibration[c] ^= (-bitValue ^ dst->colourCalibration[c]) & (1UL << b);
1622 bit_offset = bit_offset + 1;
1623 } while(false);
1624 }
1625 }
1626 } while (false);
1627 //avoid unused variable warnings when you try to use an empty gen file or a gen file with no supported serialisation types.
1628 (void)src;
1629 (void)dst;
1630 return bit_offset;
1631}
1632
1633/*#endif // WHITEBOARD_SERIALISATION*/
WHITEBOARD_POSTER_STRING_CONVERSION.
enum NeuralNetworkType networkBottom
neural network to run on bottom camera
int frameRate
The current framerate that the pipeline is running at.
int jpegStreamQuality
The quality to compress jpeg images at for streaming can be between 0 and 100.
enum VisionCamera selectedCamera
Which camera to use.
bool imageInput
Use /tmp/test.ai2 as pipeline image rather then camera if true.
bool runPipelineOnce
run the pipeline one time only if true
uint64_t frameNumber
The current frame number reported by guvison.
enum SaveFileType saveImage
Whether to save the image used in the next iteration of the pipeline to file.
int jpegStreamStride
The stride to use when streaming jpeg images.
char colourCalibration[10]
the DLC file to use for segmentation, searched in $HOME/data/ with the .dlc extension
int chooseCamera
Choose which camera to run on (0-Top, 1-Bottom, 2-Both)
bool saveClassifiedImage
Whether to save the classified version of the image used in the next iteration of the pipeline to fil...
enum NamedPipeline pipeline
vision pipeline to be run
enum NeuralNetworkType networkTop
neural network to run on top camera
enum Resolutions cameraResolution
Resolution that the camera should caputre images at.
bool pipelineRunning
Whether the pipeline is running or not.
enum StreamingType streamingSource
The type of streaming to be used.
const char * wb_vision_control_status_to_string(const struct wb_vision_control_status *self, char *toString, size_t bufferSize)
Convert to a string.
size_t wb_vision_control_status_from_network_serialised(const char *src, struct wb_vision_control_status *dst)
Convert from a compressed, serialised, network byte order byte stream.
struct wb_vision_control_status * wb_vision_control_status_from_string(struct wb_vision_control_status *self, const char *str)
Convert from a string.
#define ntohll(x)
size_t wb_vision_control_status_to_network_serialised(const struct wb_vision_control_status *self, char *dst)
Convert to a compressed, serialised, network byte order byte stream.
#define htonll(x)
#define ntohl(x)
const char * wb_vision_control_status_description(const struct wb_vision_control_status *self, char *descString, size_t bufferSize)
Convert to a description string.
#define htonl(x)
SaveFileType
List of file types that vision can save images as.
@ JPG
Compressed JPEG.
@ AI3
Raw YUV422 Image, with JSON image info blob.
@ AI2
Raw YUV422 Image.
NamedPipeline
Enum listing available vision pipelines.
@ Streaming
Pipeline that just streams images.
@ OpenChallenge
2013 Open Challange Pipeline
@ HTWK
Pipeline that runs htwk's image algorithms and post soccer object info to mipal whiteboard.
@ OpenCVFaces
Pipeline to recognise faces.
@ Soccer
Soccer Pipeline.
@ Neural_Network
Pipeline to rec objects with a nn.
Resolutions
Resolutions Supported by Vision.
@ QVGA
320 x 240
@ SVGA
800 x 600
@ VGA
640 x 480
@ QQVGA
160 x 120
@ HD_4VGA
1280x960
StreamingType
Streaming modes available in vision.
@ Recognized
Image showing only objects that have been recognised NYI.
@ Classified
Images that has been segmented into recognised colours.
@ Normal
Images straight from camera.
#define VISION_CONTROL_STATUS_DESC_BUFFER_SIZE
VisionCamera
Enum of available camera's that can be used by vision.
@ Bottom
Bottom Camera on the nao.
@ Top
Top Camera on the nao.
@ NUM_VISION_CAMERAS
Number of cameras used in vision.
NeuralNetworkType
List of neural network architectures that vision can run.
@ v2
Current default (separable convolutions)
@ BallOnly
PB_FCN v2 binary classifier.
@ Vanilla
PB_FCN.
@ VGANet
PB_FCN on VGA resolution.