From a8b1fb8f440b9877006e084139e96b30b82916af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20DI=20MERCURIO?= Date: Fri, 14 Dec 2018 17:04:42 +0100 Subject: [PATCH 01/10] passage au tout objet + messagerie --- software/raspberry/superviseur-robot/.dep.inc | 5 + .../superviseur-robot/{lib => }/TPRT.Doxyfile | 0 .../dist/Debug/GNU-Linux/superviseur | Bin 0 -> 436096 bytes .../dist/Debug/GNU-Linux/superviseur-robot | Bin 0 -> 540824 bytes .../{superviseur => }/gdbsudo.sh | 0 .../superviseur-robot/lib/camera.cpp | 86 + .../raspberry/superviseur-robot/lib/camera.h | 52 + .../superviseur-robot/lib/comgui.cpp | 189 ++ .../raspberry/superviseur-robot/lib/comgui.h | 104 ++ .../lib/doc/html/annotated.html | 108 -- .../lib/doc/html/annotated_dup.js | 7 - .../superviseur-robot/lib/doc/html/bc_s.png | Bin 676 -> 0 bytes .../superviseur-robot/lib/doc/html/bdwn.png | Bin 147 -> 0 bytes .../lib/doc/html/classes.html | 110 -- .../superviseur-robot/lib/doc/html/closed.png | Bin 132 -> 0 bytes .../lib/doc/html/definitions_8h.html | 723 -------- .../lib/doc/html/definitions_8h.js | 36 - .../doc/html/definitions_8h__dep__incl.map | 4 - .../doc/html/definitions_8h__dep__incl.md5 | 1 - .../doc/html/definitions_8h__dep__incl.png | Bin 3498 -> 0 bytes .../lib/doc/html/definitions_8h_source.html | 101 -- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 119 -- .../dir_68267d1309a1af8e8297ef4c3efbcdba.js | 8 - .../superviseur-robot/lib/doc/html/doc.png | Bin 746 -> 0 bytes .../lib/doc/html/doxygen.css | 1596 ----------------- .../lib/doc/html/doxygen.png | Bin 3779 -> 0 bytes .../lib/doc/html/dynsections.js | 104 -- .../superviseur-robot/lib/doc/html/files.html | 110 -- .../superviseur-robot/lib/doc/html/files.js | 9 - .../lib/doc/html/folderclosed.png | Bin 616 -> 0 bytes .../lib/doc/html/folderopen.png | Bin 597 -> 0 bytes .../lib/doc/html/functions.html | 117 -- .../lib/doc/html/functions_vars.html | 117 -- .../lib/doc/html/globals.html | 425 ----- .../lib/doc/html/globals_defs.html | 309 ---- .../lib/doc/html/globals_func.html | 173 -- .../lib/doc/html/globals_type.html | 119 -- .../lib/doc/html/globals_vars.html | 116 -- .../lib/doc/html/graph_legend.html | 129 -- .../lib/doc/html/graph_legend.md5 | 1 - .../lib/doc/html/graph_legend.png | Bin 19465 -> 0 bytes .../lib/doc/html/image_8cpp.html | 574 ------ .../lib/doc/html/image_8cpp.js | 14 - .../lib/doc/html/image_8cpp__incl.map | 3 - .../lib/doc/html/image_8cpp__incl.md5 | 1 - .../lib/doc/html/image_8cpp__incl.png | Bin 13225 -> 0 bytes .../lib/doc/html/image_8cpp_source.html | 126 -- .../lib/doc/html/image_8h.html | 598 ------ .../lib/doc/html/image_8h.js | 18 - .../lib/doc/html/image_8h__dep__incl.map | 4 - .../lib/doc/html/image_8h__dep__incl.md5 | 1 - .../lib/doc/html/image_8h__dep__incl.png | Bin 4405 -> 0 bytes .../lib/doc/html/image_8h__incl.map | 2 - .../lib/doc/html/image_8h__incl.md5 | 1 - .../lib/doc/html/image_8h__incl.png | Bin 8285 -> 0 bytes .../lib/doc/html/image_8h_source.html | 120 -- .../superviseur-robot/lib/doc/html/index.html | 100 -- .../superviseur-robot/lib/doc/html/jquery.js | 87 - .../superviseur-robot/lib/doc/html/menu.js | 26 - .../lib/doc/html/menudata.js | 38 - .../lib/doc/html/message_8cpp.html | 237 --- .../lib/doc/html/message_8cpp.js | 7 - .../lib/doc/html/message_8cpp__incl.map | 3 - .../lib/doc/html/message_8cpp__incl.md5 | 1 - .../lib/doc/html/message_8cpp__incl.png | Bin 10285 -> 0 bytes .../lib/doc/html/message_8cpp_source.html | 109 -- .../lib/doc/html/message_8h.html | 247 --- .../lib/doc/html/message_8h.js | 8 - .../lib/doc/html/message_8h__dep__incl.map | 3 - .../lib/doc/html/message_8h__dep__incl.md5 | 1 - .../lib/doc/html/message_8h__dep__incl.png | Bin 3010 -> 0 bytes .../lib/doc/html/message_8h__incl.map | 2 - .../lib/doc/html/message_8h__incl.md5 | 1 - .../lib/doc/html/message_8h__incl.png | Bin 7100 -> 0 bytes .../lib/doc/html/message_8h_source.html | 106 -- .../lib/doc/html/monitor_8cpp.html | 352 ---- .../lib/doc/html/monitor_8cpp.js | 11 - .../lib/doc/html/monitor_8cpp__incl.map | 6 - .../lib/doc/html/monitor_8cpp__incl.md5 | 1 - .../lib/doc/html/monitor_8cpp__incl.png | Bin 37992 -> 0 bytes .../lib/doc/html/monitor_8cpp_source.html | 127 -- .../lib/doc/html/monitor_8h.html | 692 ------- .../lib/doc/html/monitor_8h.js | 31 - .../lib/doc/html/monitor_8h__dep__incl.map | 3 - .../lib/doc/html/monitor_8h__dep__incl.md5 | 1 - .../lib/doc/html/monitor_8h__dep__incl.png | Bin 2648 -> 0 bytes .../lib/doc/html/monitor_8h__incl.map | 4 - .../lib/doc/html/monitor_8h__incl.md5 | 1 - .../lib/doc/html/monitor_8h__incl.png | Bin 32969 -> 0 bytes .../lib/doc/html/monitor_8h_source.html | 109 -- .../superviseur-robot/lib/doc/html/nav_f.png | Bin 153 -> 0 bytes .../superviseur-robot/lib/doc/html/nav_g.png | Bin 95 -> 0 bytes .../superviseur-robot/lib/doc/html/nav_h.png | Bin 98 -> 0 bytes .../lib/doc/html/navtree.css | 146 -- .../superviseur-robot/lib/doc/html/navtree.js | 517 ------ .../lib/doc/html/navtreedata.js | 30 - .../lib/doc/html/navtreeindex0.js | 130 -- .../superviseur-robot/lib/doc/html/open.png | Bin 123 -> 0 bytes .../superviseur-robot/lib/doc/html/resize.js | 114 -- .../lib/doc/html/robot-icon.resized.png | Bin 913 -> 0 bytes .../lib/doc/html/robot_8cpp.html | 373 ---- .../lib/doc/html/robot_8cpp.js | 12 - .../lib/doc/html/robot_8cpp__incl.map | 4 - .../lib/doc/html/robot_8cpp__incl.md5 | 1 - .../lib/doc/html/robot_8cpp__incl.png | Bin 15044 -> 0 bytes .../lib/doc/html/robot_8cpp_source.html | 129 -- .../lib/doc/html/robot_8h.html | 262 --- .../lib/doc/html/robot_8h.js | 8 - .../lib/doc/html/robot_8h__dep__incl.map | 3 - .../lib/doc/html/robot_8h__dep__incl.md5 | 1 - .../lib/doc/html/robot_8h__dep__incl.png | Bin 2333 -> 0 bytes .../lib/doc/html/robot_8h__incl.map | 3 - .../lib/doc/html/robot_8h__incl.md5 | 1 - .../lib/doc/html/robot_8h__incl.png | Bin 11536 -> 0 bytes .../lib/doc/html/robot_8h_source.html | 107 -- .../lib/doc/html/search/all_0.html | 26 - .../lib/doc/html/search/all_0.js | 6 - .../lib/doc/html/search/all_1.html | 26 - .../lib/doc/html/search/all_1.js | 19 - .../lib/doc/html/search/all_2.html | 26 - .../lib/doc/html/search/all_2.js | 34 - .../lib/doc/html/search/all_3.html | 26 - .../lib/doc/html/search/all_3.js | 4 - .../lib/doc/html/search/all_4.html | 26 - .../lib/doc/html/search/all_4.js | 4 - .../lib/doc/html/search/all_5.html | 26 - .../lib/doc/html/search/all_5.js | 17 - .../lib/doc/html/search/all_6.html | 26 - .../lib/doc/html/search/all_6.js | 6 - .../lib/doc/html/search/all_7.html | 26 - .../lib/doc/html/search/all_7.js | 4 - .../lib/doc/html/search/all_8.html | 26 - .../lib/doc/html/search/all_8.js | 8 - .../lib/doc/html/search/all_9.html | 26 - .../lib/doc/html/search/all_9.js | 4 - .../lib/doc/html/search/all_a.html | 26 - .../lib/doc/html/search/all_a.js | 7 - .../lib/doc/html/search/all_b.html | 26 - .../lib/doc/html/search/all_b.js | 5 - .../lib/doc/html/search/all_c.html | 26 - .../lib/doc/html/search/all_c.js | 12 - .../lib/doc/html/search/all_d.html | 26 - .../lib/doc/html/search/all_d.js | 16 - .../lib/doc/html/search/all_e.html | 26 - .../lib/doc/html/search/all_e.js | 4 - .../lib/doc/html/search/all_f.html | 26 - .../lib/doc/html/search/all_f.js | 4 - .../lib/doc/html/search/classes_0.html | 26 - .../lib/doc/html/search/classes_0.js | 6 - .../lib/doc/html/search/classes_1.html | 26 - .../lib/doc/html/search/classes_1.js | 4 - .../lib/doc/html/search/close.png | Bin 273 -> 0 bytes .../lib/doc/html/search/defines_0.html | 26 - .../lib/doc/html/search/defines_0.js | 13 - .../lib/doc/html/search/defines_1.html | 26 - .../lib/doc/html/search/defines_1.js | 28 - .../lib/doc/html/search/defines_2.html | 26 - .../lib/doc/html/search/defines_2.js | 16 - .../lib/doc/html/search/defines_3.html | 26 - .../lib/doc/html/search/defines_3.js | 4 - .../lib/doc/html/search/defines_4.html | 26 - .../lib/doc/html/search/defines_4.js | 4 - .../lib/doc/html/search/defines_5.html | 26 - .../lib/doc/html/search/defines_5.js | 4 - .../lib/doc/html/search/defines_6.html | 26 - .../lib/doc/html/search/defines_6.js | 8 - .../lib/doc/html/search/defines_7.html | 26 - .../lib/doc/html/search/defines_7.js | 5 - .../lib/doc/html/search/defines_8.html | 26 - .../lib/doc/html/search/defines_8.js | 4 - .../lib/doc/html/search/files_0.html | 26 - .../lib/doc/html/search/files_0.js | 4 - .../lib/doc/html/search/files_1.html | 26 - .../lib/doc/html/search/files_1.js | 4 - .../lib/doc/html/search/files_2.html | 26 - .../lib/doc/html/search/files_2.js | 5 - .../lib/doc/html/search/files_3.html | 26 - .../lib/doc/html/search/files_3.js | 4 - .../lib/doc/html/search/files_4.html | 26 - .../lib/doc/html/search/files_4.js | 4 - .../lib/doc/html/search/functions_0.html | 26 - .../lib/doc/html/search/functions_0.js | 4 - .../lib/doc/html/search/functions_1.html | 26 - .../lib/doc/html/search/functions_1.js | 7 - .../lib/doc/html/search/functions_2.html | 26 - .../lib/doc/html/search/functions_2.js | 7 - .../lib/doc/html/search/functions_3.html | 26 - .../lib/doc/html/search/functions_3.js | 4 - .../lib/doc/html/search/functions_4.html | 26 - .../lib/doc/html/search/functions_4.js | 4 - .../lib/doc/html/search/functions_5.html | 26 - .../lib/doc/html/search/functions_5.js | 6 - .../lib/doc/html/search/functions_6.html | 26 - .../lib/doc/html/search/functions_6.js | 4 - .../lib/doc/html/search/functions_7.html | 26 - .../lib/doc/html/search/functions_7.js | 6 - .../lib/doc/html/search/functions_8.html | 26 - .../lib/doc/html/search/functions_8.js | 10 - .../lib/doc/html/search/functions_9.html | 26 - .../lib/doc/html/search/functions_9.js | 12 - .../lib/doc/html/search/mag_sel.png | Bin 563 -> 0 bytes .../lib/doc/html/search/nomatches.html | 12 - .../lib/doc/html/search/search.css | 271 --- .../lib/doc/html/search/search.js | 791 -------- .../lib/doc/html/search/search_l.png | Bin 604 -> 0 bytes .../lib/doc/html/search/search_m.png | Bin 158 -> 0 bytes .../lib/doc/html/search/search_r.png | Bin 612 -> 0 bytes .../lib/doc/html/search/searchdata.js | 33 - .../lib/doc/html/search/typedefs_0.html | 26 - .../lib/doc/html/search/typedefs_0.js | 4 - .../lib/doc/html/search/typedefs_1.html | 26 - .../lib/doc/html/search/typedefs_1.js | 4 - .../lib/doc/html/search/typedefs_2.html | 26 - .../lib/doc/html/search/typedefs_2.js | 4 - .../lib/doc/html/search/typedefs_3.html | 26 - .../lib/doc/html/search/typedefs_3.js | 4 - .../lib/doc/html/search/typedefs_4.html | 26 - .../lib/doc/html/search/typedefs_4.js | 6 - .../lib/doc/html/search/variables_0.html | 26 - .../lib/doc/html/search/variables_0.js | 4 - .../lib/doc/html/search/variables_1.html | 26 - .../lib/doc/html/search/variables_1.js | 4 - .../lib/doc/html/search/variables_2.html | 26 - .../lib/doc/html/search/variables_2.js | 5 - .../lib/doc/html/search/variables_3.html | 26 - .../lib/doc/html/search/variables_3.js | 4 - .../lib/doc/html/search/variables_4.html | 26 - .../lib/doc/html/search/variables_4.js | 4 - .../lib/doc/html/search/variables_5.html | 26 - .../lib/doc/html/search/variables_5.js | 4 - .../lib/doc/html/search/variables_6.html | 26 - .../lib/doc/html/search/variables_6.js | 6 - .../lib/doc/html/server_8cpp.html | 403 ----- .../lib/doc/html/server_8cpp.js | 13 - .../lib/doc/html/server_8cpp__incl.map | 3 - .../lib/doc/html/server_8cpp__incl.md5 | 1 - .../lib/doc/html/server_8cpp__incl.png | Bin 12681 -> 0 bytes .../lib/doc/html/server_8cpp_source.html | 112 -- .../lib/doc/html/server_8h.html | 441 ----- .../lib/doc/html/server_8h.js | 12 - .../lib/doc/html/server_8h__dep__incl.map | 4 - .../lib/doc/html/server_8h__dep__incl.md5 | 1 - .../lib/doc/html/server_8h__dep__incl.png | Bin 4505 -> 0 bytes .../lib/doc/html/server_8h__incl.map | 3 - .../lib/doc/html/server_8h__incl.md5 | 1 - .../lib/doc/html/server_8h__incl.png | Bin 10727 -> 0 bytes .../lib/doc/html/server_8h_source.html | 111 -- .../lib/doc/html/splitbar.png | Bin 314 -> 0 bytes .../html/struct_message_from_mon-members.html | 105 -- .../lib/doc/html/struct_message_from_mon.html | 153 -- .../lib/doc/html/struct_message_from_mon.js | 5 - .../html/struct_message_to_mon-members.html | 105 -- .../lib/doc/html/struct_message_to_mon.html | 153 -- .../lib/doc/html/struct_message_to_mon.js | 5 - .../html/struct_message_to_robot-members.html | 105 -- .../lib/doc/html/struct_message_to_robot.html | 153 -- .../lib/doc/html/struct_message_to_robot.js | 5 - .../lib/doc/html/struct_position-members.html | 106 -- .../lib/doc/html/struct_position.html | 171 -- .../lib/doc/html/struct_position.js | 6 - .../lib/doc/html/sync_off.png | Bin 853 -> 0 bytes .../lib/doc/html/sync_on.png | Bin 845 -> 0 bytes .../superviseur-robot/lib/doc/html/tab_a.png | Bin 142 -> 0 bytes .../superviseur-robot/lib/doc/html/tab_b.png | Bin 169 -> 0 bytes .../superviseur-robot/lib/doc/html/tab_h.png | Bin 177 -> 0 bytes .../superviseur-robot/lib/doc/html/tab_s.png | Bin 184 -> 0 bytes .../superviseur-robot/lib/doc/html/tabs.css | 1 - .../lib/doc/latex/annotated.tex | 7 - .../lib/doc/latex/definitions_8h.tex | 430 ----- .../doc/latex/definitions_8h__dep__incl.md5 | 1 - .../doc/latex/definitions_8h__dep__incl.pdf | Bin 11951 -> 0 bytes .../dir_68267d1309a1af8e8297ef4c3efbcdba.tex | 15 - .../lib/doc/latex/doxygen.sty | 503 ------ .../superviseur-robot/lib/doc/latex/files.tex | 9 - .../lib/doc/latex/image_8cpp.tex | 283 --- .../lib/doc/latex/image_8cpp__incl.md5 | 1 - .../lib/doc/latex/image_8cpp__incl.pdf | Bin 13690 -> 0 bytes .../lib/doc/latex/image_8h.tex | 312 ---- .../lib/doc/latex/image_8h__dep__incl.md5 | 1 - .../lib/doc/latex/image_8h__dep__incl.pdf | Bin 12093 -> 0 bytes .../lib/doc/latex/image_8h__incl.md5 | 1 - .../lib/doc/latex/image_8h__incl.pdf | Bin 13504 -> 0 bytes .../lib/doc/latex/message_8cpp.tex | 84 - .../lib/doc/latex/message_8cpp__incl.md5 | 1 - .../lib/doc/latex/message_8cpp__incl.pdf | Bin 13557 -> 0 bytes .../lib/doc/latex/message_8h.tex | 91 - .../lib/doc/latex/message_8h__dep__incl.md5 | 1 - .../lib/doc/latex/message_8h__dep__incl.pdf | Bin 11755 -> 0 bytes .../lib/doc/latex/message_8h__incl.md5 | 1 - .../lib/doc/latex/message_8h__incl.pdf | Bin 12979 -> 0 bytes .../lib/doc/latex/monitor_8cpp.tex | 163 -- .../lib/doc/latex/monitor_8cpp__incl.md5 | 1 - .../lib/doc/latex/monitor_8cpp__incl.pdf | Bin 15473 -> 0 bytes .../lib/doc/latex/monitor_8h.tex | 406 ----- .../lib/doc/latex/monitor_8h__dep__incl.md5 | 1 - .../lib/doc/latex/monitor_8h__dep__incl.pdf | Bin 11469 -> 0 bytes .../lib/doc/latex/monitor_8h__incl.md5 | 1 - .../lib/doc/latex/monitor_8h__incl.pdf | Bin 15244 -> 0 bytes .../lib/doc/latex/refman.tex | 167 -- .../lib/doc/latex/robot-icon.resized.png | Bin 913 -> 0 bytes .../lib/doc/latex/robot_8cpp.tex | 175 -- .../lib/doc/latex/robot_8cpp__incl.md5 | 1 - .../lib/doc/latex/robot_8cpp__incl.pdf | Bin 13591 -> 0 bytes .../lib/doc/latex/robot_8h.tex | 127 -- .../lib/doc/latex/robot_8h__dep__incl.md5 | 1 - .../lib/doc/latex/robot_8h__dep__incl.pdf | Bin 11179 -> 0 bytes .../lib/doc/latex/robot_8h__incl.md5 | 1 - .../lib/doc/latex/robot_8h__incl.pdf | Bin 13168 -> 0 bytes .../lib/doc/latex/server_8cpp.tex | 173 -- .../lib/doc/latex/server_8cpp__incl.md5 | 1 - .../lib/doc/latex/server_8cpp__incl.pdf | Bin 13558 -> 0 bytes .../lib/doc/latex/server_8h.tex | 225 --- .../lib/doc/latex/server_8h__dep__incl.md5 | 1 - .../lib/doc/latex/server_8h__dep__incl.pdf | Bin 11882 -> 0 bytes .../lib/doc/latex/server_8h__incl.md5 | 1 - .../lib/doc/latex/server_8h__incl.pdf | Bin 13582 -> 0 bytes .../lib/doc/latex/struct_message_from_mon.tex | 48 - .../lib/doc/latex/struct_message_to_mon.tex | 48 - .../lib/doc/latex/struct_message_to_robot.tex | 48 - .../lib/doc/latex/struct_position.tex | 60 - .../superviseur-robot/lib/{src => }/image.cpp | 0 .../raspberry/superviseur-robot/lib/image.h | 10 - .../raspberry/superviseur-robot/lib/img.cpp | 211 +++ .../raspberry/superviseur-robot/lib/img.h | 84 + .../lib/{src => }/message.cpp | 0 .../superviseur-robot/lib/messages.cpp | 327 ++++ .../superviseur-robot/lib/messages.h | 786 ++++++++ .../lib/{src => }/monitor.cpp | 0 .../superviseur-robot/lib/{src => }/robot.cpp | 0 .../lib/{src => }/server.cpp | 0 .../{superviseur/src => }/main.cpp | 2 +- .../nbproject/Makefile-Debug.mk | 119 ++ .../nbproject/Makefile-Debug__RPI_.mk | 125 ++ .../nbproject/Makefile-Release.mk | 125 ++ .../nbproject/Makefile-impl.mk | 2 +- .../nbproject/Makefile-variables.mk | 24 +- .../nbproject/Package-Debug.bash | 12 +- .../nbproject/Package-Debug__RPI_.bash | 12 +- .../nbproject/Package-Release.bash | 12 +- .../nbproject/configurations.xml | 270 +++ .../nbproject/private/Makefile-variables.mk | 0 .../private/c_standard_headers_indexer.c | 0 .../nbproject/private/configurations.xml | 2 +- .../private/cpp_standard_headers_indexer.cpp | 0 .../private/downloads-10.105.1.13-pi-22 | 0 .../nbproject/private/launcher.properties | 0 .../nbproject/private/private.xml | 18 +- .../private/timestamps-10.105.1.13-pi-22 | 0 .../nbproject/project.properties | 0 .../{superviseur => }/nbproject/project.xml | 0 .../superviseur-robot/superviseur/.gitignore | 10 - .../superviseur/CMakeLists.txt | 15 - .../superviseur/nbproject/Makefile-Debug.mk | 119 -- .../nbproject/Makefile-Debug__RPI_.mk | 119 -- .../superviseur/nbproject/Makefile-Release.mk | 119 -- .../superviseur/nbproject/configurations.xml | 230 --- .../src/functions.cpp => tasks.cpp} | 2 +- .../{superviseur/src/functions.h => tasks.h} | 0 358 files changed, 2526 insertions(+), 19291 deletions(-) create mode 100644 software/raspberry/superviseur-robot/.dep.inc rename software/raspberry/superviseur-robot/{lib => }/TPRT.Doxyfile (100%) create mode 100755 software/raspberry/superviseur-robot/dist/Debug/GNU-Linux/superviseur create mode 100755 software/raspberry/superviseur-robot/dist/Debug/GNU-Linux/superviseur-robot rename software/raspberry/superviseur-robot/{superviseur => }/gdbsudo.sh (100%) create mode 100644 software/raspberry/superviseur-robot/lib/camera.cpp create mode 100644 software/raspberry/superviseur-robot/lib/camera.h create mode 100644 software/raspberry/superviseur-robot/lib/comgui.cpp create mode 100644 software/raspberry/superviseur-robot/lib/comgui.h delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/annotated.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/annotated_dup.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/bc_s.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/bdwn.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/classes.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/closed.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/definitions_8h.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/definitions_8h.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/definitions_8h_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/doc.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/doxygen.css delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/doxygen.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/dynsections.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/files.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/files.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/folderclosed.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/folderopen.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/functions.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/functions_vars.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/globals.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/globals_defs.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/globals_func.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/globals_type.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/globals_vars.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/graph_legend.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/graph_legend.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/graph_legend.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8cpp.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8cpp.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8cpp_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/image_8h_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/index.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/jquery.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/menu.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/menudata.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8cpp.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8cpp.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8cpp_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/message_8h_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/monitor_8h_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/nav_f.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/nav_g.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/nav_h.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/navtree.css delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/navtree.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/navtreedata.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/navtreeindex0.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/open.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/resize.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot-icon.resized.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/robot_8h_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_0.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_0.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_1.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_1.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_2.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_2.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_3.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_3.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_4.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_4.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_5.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_5.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_6.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_6.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_7.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_7.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_8.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_8.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_9.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_9.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_a.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_a.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_b.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_b.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_c.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_c.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_d.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_d.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_e.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_e.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_f.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/all_f.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/classes_0.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/classes_0.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/classes_1.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/classes_1.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/close.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_0.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_0.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_1.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_1.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_2.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_2.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_3.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_3.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_4.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_4.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_5.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_5.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_6.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_6.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_7.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_7.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_8.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/defines_8.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_0.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_0.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_1.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_1.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_2.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_2.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_3.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_3.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_4.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/files_4.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_0.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_0.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_1.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_1.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_2.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_2.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_3.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_3.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_4.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_4.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_5.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_5.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_6.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_6.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_7.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_7.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_8.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_8.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_9.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/functions_9.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/mag_sel.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/nomatches.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/search.css delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/search.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/search_l.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/search_m.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/search_r.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/searchdata.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_0.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_0.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_1.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_1.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_2.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_2.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_3.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_3.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_4.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_4.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_0.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_0.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_1.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_1.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_2.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_2.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_3.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_3.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_4.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_4.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_5.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_5.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_6.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/search/variables_6.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8cpp.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8cpp.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8cpp_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.map delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/server_8h_source.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/splitbar.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon-members.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon-members.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot-members.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_position-members.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_position.html delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/struct_position.js delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/sync_off.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/sync_on.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/tab_a.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/tab_b.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/tab_h.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/tab_s.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/html/tabs.css delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/annotated.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h__dep__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/dir_68267d1309a1af8e8297ef4c3efbcdba.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/doxygen.sty delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/files.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/image_8h.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/image_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/image_8h__dep__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/image_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/image_8h__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/message_8h.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/message_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/message_8h__dep__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/message_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/message_8h__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__dep__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/refman.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot-icon.resized.png delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot_8h.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__dep__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/server_8h.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/server_8h__dep__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/server_8h__dep__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/server_8h__incl.md5 delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/server_8h__incl.pdf delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/struct_message_from_mon.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/struct_message_to_mon.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/struct_message_to_robot.tex delete mode 100644 software/raspberry/superviseur-robot/lib/doc/latex/struct_position.tex rename software/raspberry/superviseur-robot/lib/{src => }/image.cpp (100%) create mode 100644 software/raspberry/superviseur-robot/lib/img.cpp create mode 100644 software/raspberry/superviseur-robot/lib/img.h rename software/raspberry/superviseur-robot/lib/{src => }/message.cpp (100%) create mode 100644 software/raspberry/superviseur-robot/lib/messages.cpp create mode 100644 software/raspberry/superviseur-robot/lib/messages.h rename software/raspberry/superviseur-robot/lib/{src => }/monitor.cpp (100%) rename software/raspberry/superviseur-robot/lib/{src => }/robot.cpp (100%) rename software/raspberry/superviseur-robot/lib/{src => }/server.cpp (100%) rename software/raspberry/superviseur-robot/{superviseur/src => }/main.cpp (99%) create mode 100644 software/raspberry/superviseur-robot/nbproject/Makefile-Debug.mk create mode 100644 software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk create mode 100644 software/raspberry/superviseur-robot/nbproject/Makefile-Release.mk rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/Makefile-impl.mk (99%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/Makefile-variables.mk (69%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/Package-Debug.bash (88%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/Package-Debug__RPI_.bash (88%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/Package-Release.bash (88%) create mode 100644 software/raspberry/superviseur-robot/nbproject/configurations.xml rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/private/Makefile-variables.mk (100%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/private/c_standard_headers_indexer.c (100%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/private/configurations.xml (98%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/private/cpp_standard_headers_indexer.cpp (100%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/private/downloads-10.105.1.13-pi-22 (100%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/private/launcher.properties (100%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/private/private.xml (72%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/private/timestamps-10.105.1.13-pi-22 (100%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/project.properties (100%) rename software/raspberry/superviseur-robot/{superviseur => }/nbproject/project.xml (100%) delete mode 100644 software/raspberry/superviseur-robot/superviseur/.gitignore delete mode 100644 software/raspberry/superviseur-robot/superviseur/CMakeLists.txt delete mode 100644 software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Debug.mk delete mode 100644 software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Debug__RPI_.mk delete mode 100644 software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Release.mk delete mode 100644 software/raspberry/superviseur-robot/superviseur/nbproject/configurations.xml rename software/raspberry/superviseur-robot/{superviseur/src/functions.cpp => tasks.cpp} (99%) rename software/raspberry/superviseur-robot/{superviseur/src/functions.h => tasks.h} (100%) diff --git a/software/raspberry/superviseur-robot/.dep.inc b/software/raspberry/superviseur-robot/.dep.inc new file mode 100644 index 0000000..38ba445 --- /dev/null +++ b/software/raspberry/superviseur-robot/.dep.inc @@ -0,0 +1,5 @@ +# This code depends on make tool being used +DEPFILES=$(wildcard $(addsuffix .d, ${OBJECTFILES} ${TESTOBJECTFILES})) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/software/raspberry/superviseur-robot/lib/TPRT.Doxyfile b/software/raspberry/superviseur-robot/TPRT.Doxyfile similarity index 100% rename from software/raspberry/superviseur-robot/lib/TPRT.Doxyfile rename to software/raspberry/superviseur-robot/TPRT.Doxyfile diff --git a/software/raspberry/superviseur-robot/dist/Debug/GNU-Linux/superviseur b/software/raspberry/superviseur-robot/dist/Debug/GNU-Linux/superviseur new file mode 100755 index 0000000000000000000000000000000000000000..190e2994bd337fdd6359b766d1b5549b37f607d7 GIT binary patch literal 436096 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 literal 0 HcmV?d00001 diff --git a/software/raspberry/superviseur-robot/dist/Debug/GNU-Linux/superviseur-robot b/software/raspberry/superviseur-robot/dist/Debug/GNU-Linux/superviseur-robot new file mode 100755 index 0000000000000000000000000000000000000000..8010f7f4b344a0f5754f5ba79c3630bfffd38f6b GIT binary patch literal 540824 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 z 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�#9aS!LeOuanTx4yx`B>lv;Y;zc_#8@~_<&?xH!0or z7Nylu(W^4%1&&eH@0?Z?N?TSLK3I=Brq3E4CX|w5(jHRJd;zp1)j1^*awD z|NpwN5-Ab>Bd*3KW$6#uA3K~6nRAgir6}#jDvJK!+f1ZrF^Oh#h=ncJo)SV74t0&V zh}+6Y*96RiD^q4wfN`c*WM|8w9mnWOc%UFOK3Tp8epnrRPc42ar$yLMI$6di7SIg< z2qkp<3Q6hcil}7%_%-r6N#6SaFIcYQ1v5O9uns5dnPJuJk2eM5H}FYl*tmOWpN;Y^ zL^6k+AA^%kEE5?va|cc~^GR;xHWUcUnt)>{Ru&r8^Iw$aD4(cDKH|TSyrqf^{-q2^Y5Z|X>F8DH(+Tm{WF-0)Kll-U zgC*6Ttv-=q%b<-dGWe#h+3@0J(_D~iXM&AO6 zPvstkll)5jqL%;6;p+~_}8892i4-8Um)Pli9C_Uj9|2TLfbGPEygRZk91mHtM zv@#TvgADx}ZHc zc@fuQPI+QGX0viuA0cwdr;~-qE$7t6Q$unRdPQEjJ;D(AAt{orE)+s^d8x86Q$SHz+$ufX*6NBp*$tzr3!e` zNYXsElpK8!%P%tLdOU+7Gu{-Utc-@9ap|RDg9Xs1L;Lr4X7lS!VkP9hohyc$_?v;s3yNbSE(+8 zFd)>BKTpI{JTlIWdwm(66%XCZD|@i(FTchhRaa(Az-z6tc^vk}qzjg5AS?fb$HC<0 zOjxLwpJN6TC-Z!Wjwa{a$M7P5%7x)eZoY-BbeR`daWnYs|mPnR#w zpTtn%~ux$@HagIQG^fsbb2{J@)*#-T)j|^^3 z=@D}&-Q{lt{biRA@bInt)x=vCa%Uc*H|Q@wZ;!tv?kC@FMd{oJ z@Cu^rgy)6^$q7}27%a1l#R8eEh~70&Ho-%fgJjr7O8@;3d$qEX2hXX=-wz8hOrAwu zhRP)Tzw%IdW(i(plOG)=`koKzc<3`BhD%Q_Ax6lS=!YYv4=p}QX4rs7*<>Zubd-#* zgx7xLUDRugEZa;VogRLBj9dl!`|{@3LX4Fq;c&;v;@$9UoSgMJ_Df_?R(vW-3Lq!R z@~iQvpo~EeoFtdPGftLUFB9gXB+MDK?-VgWd#ruNU*xhz4THty-#f`!{ZNB8nOeSs zeP>w;-CjE2V@4rNA?4#@1n!FK(U8Y6(KKc4@5qm>tOllRE8x2vkyx`ki5yvlJ|_<^ zCO7zVOA@K|7wK=ai=5s|?8>=i_nL68@*MuUAXGG*QxiQt$~*;B!+Dg>&1u`yHm|*S zCe#js4;0dcRyO25^f6PO!D59=PJnNbGWUG;qC?4xwuR;0at3;`C5OY>9$CeUIifsP zl{{zPPw?QoJcPoemew`_&v~RcdCr2#7%JqBHsm?`S0~T;<9z|od1E%#`{ciggWa5) zA?bx*ik6AcQ&=9HL>}^SY4VW4$H{YEu}pZ*2e>Lr$i1*-N%=PVZ7KN;8oIQMz?D)) zzI;U9GR;o%mUS@IjFE3)LLV#hohEPD8a=0iEPI@M=0~5B&$OVwl04dh{GoS0#&FsA zHu=f)g~&HHz=%*yN~};;m$|zL_{Ndw1vTYRj6SvGX?Ty?vcL%PjmvlA#zoeG|EwoF z;R>oRN1-z`kdGkMP-Z_b;2XykCf|4f7K@i-Q8u6RyOj(EpcX|x}&_jm9d-RkR z?&5mM53Z0GGN7T44EhQS-E#IpA^OVd%M5s%aS7y+R--QO$sMK0BaOhQG*AvLfG>E; zCh&NJ<^0U}TS@uFbMi3T3X?yX+ZhiDNDo}(2-yR+8YvCrK1%lahJ3}7n*zS#JM@S5 z<&LK0E5^dlkCW3c3it{y+G~RRY?Oc>I1x?0Vqb0Y4=tf*imX3Eh^g{4M(1fV75c_> zIe(cDGvtR~;k5;sxiLP!EQ?}HoGm?}m@vu9o$xlk>|PR&WJn)I(s}YH=$tR}Md1l` z8EqM2p$ttg#3EV8#L~Td2o1^d)8axbk)vSerSkaahFB)Eqg2af1U%jfnf_P2&Le-o zwYEy`Xp9{bIT58@BTu50*UCCag;*zZ;yPU~b6vzAfXLBHh1e(;V}#u#-J|iauDswA z;zKDv6=I8gG6oL?${Co-Z5;GKaqQ| zQnyQ1`$34^GW{GO_QnA6;N`zZycu}qCoYC~Sz$F>u0SwO!gq~>&ho^oVDoH1!6;DT zJNE7;;wllKg$+P~3RNRsziz!m9B)bV58y?&Ctm+V@T!vB%m7~Dp*RUYf##2^MZC=c zydv|7x0IYm9pW7i;1%6Lyqgoit4F*W0lZ@0;3T+3aoVs6uZe3St^+|*&DM2QPoW35 zDDjwd3`GZwOCmsF2S7%KhLRaT32sq}_H)8(rbijyAzYk|1Fv*>oP>Y>61-l-d)MX} zv}yoAnYTd+Zc&ytih^5|D?zIEH3EDY!579B0yv>+q#T_BuIGbl@+V~w%;*J3_n)7;oYR67OjMulW_6WIAvLI%{$nGR?8O z0zr}M+s}aL*STk+h-<`%N+}R_!CT}2IaAitP*jI$2`OMu)UpO4YF-DTJ|o7wifGjZ zl<+2SFmWGH?yFt}w4OvN&YS@tGjCHKuo2MTW+O@WgX507Mbei7cx{i7-~mwMDi}*J zEBHHr+3q?qt6>HZSCyGz7%uI4wHG)EAF~q7A*8iL052gs@jO+L<2d3q4B#ck5brD% zbvW_52k<&H!%3!tRGL_$7D_WAfZ6d~VpgZpRA%Pt0A{D@#Jr7ZQ(Rsy;lTiA(k5bh zzJsKTnb&QmU760u39~fC~m#Ju>jL7F8s1`tUO$AD(I+cMa z$%uw25Vi;DR)k=ONRhJTJ2nhDx;G% z;_FNh&&Y_c9E5gHJ-2}pUcM<1_o>`>YyhNtog?XwFF=10mJY&PniF95{uRu6E%Ova zUF)^X+Xd4+Z`1%&v@A?}dETAyh%I^e@m|FIyk$B1EEaDH{ytK5tBKO>yF5YERktY6lHqU z=!oU$pgi=LoX2&*VHT!>Sym&I!?PKASk}1pNbW+?ZP5dS*j!vf$HN$`vD(kaxE@$l5yeA~{Y6>Rn7jo9xAiF>3uEf*w#xBQ zV!GnCl0PBsZcJ7^+gW?!FGNsBVtP(+iF`nNzGcKiB%`crEKXz?1V^lS;pq93(P#D$ z*@J0&6qDT+{hylKngyFhvCX5baY$Phy&!8@^e<~}>oH5c;N$+^2!Dc)wduCZx`GJ{ zc8q~{Gv2ZmJVJ(D7qTestSsv>9|`Cg39@CigrsLOBZ}{(tn=dNW-|5yk;b|?K|W-( zZ$B{`Fp$WW6%LB$OO`*y%r<@Kc^Go)00>?wSOaz84o2c z7trwfCjCYZER6Z+s8b3w=(rKP6E^@jC0_eR@8TW{<66w_0P?~$yY zq5Uz`--U~&a{G3p@z66;BL^18?6fmdqehJw)H)G&I!M19dBS+O7=uh3x@d*)sR++( zerYtpy=`|*@9WUVF2)MZ_8xTG&O?_ut4HtT@d2k@Ma8w~3G0AsF+_>wa-@m+B|^T5 zEpYRNrZs1EE!Vz%ACbEMR`e%xRzmsJ9JdgWS155F;A;pOYylBN^6hXR;lZ7MeVs#y zlLJxHBlt)X+C@bl+Nm@s`ClsyQClEzX?Ek<@s}n7*CdrD1IH*$BT94zxDNuCh6F?m z$q#IVkFp}p_F8F(x*Wkrl2n@5o+r=&G>&=&{fy*uVDr;SKy#$ zBx)jpk0iM?|9ppAR-9~ktu#bkhrs4cKP1qc5<*m(zrLjyr71;(odAE1z@;Gp5kvCg zEdKZx@ygdqL)2dpd?ZPwsg!{0G5u0p0vek}nFuB&Y6Jq8rW3AM!bcuQXD|zcTn&Nq zZ30%c_U*fgR3WYwNQ)Sf%GLr4o`?r%z1bbTL>-FYBQ4PBE5mUDcE%#GgsSnl==o -
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
-
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/annotated_dup.js b/software/raspberry/superviseur-robot/lib/doc/html/annotated_dup.js deleted file mode 100644 index f1dedf8..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/annotated_dup.js +++ /dev/null @@ -1,7 +0,0 @@ -var annotated_dup = -[ - [ "MessageFromMon", "struct_message_from_mon.html", "struct_message_from_mon" ], - [ "MessageToMon", "struct_message_to_mon.html", "struct_message_to_mon" ], - [ "MessageToRobot", "struct_message_to_robot.html", "struct_message_to_robot" ], - [ "Position", "struct_position.html", "struct_position" ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/bc_s.png b/software/raspberry/superviseur-robot/lib/doc/html/bc_s.png deleted file mode 100644 index 224b29aa9847d5a4b3902efd602b7ddf7d33e6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT diff --git a/software/raspberry/superviseur-robot/lib/doc/html/bdwn.png b/software/raspberry/superviseur-robot/lib/doc/html/bdwn.png deleted file mode 100644 index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - - - - - - -Bibliotheques TP RT: Class Index - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class Index
-
-
-
m | p
- - - - - -
  m  
-
MessageToMon   
  p  
-
MessageToRobot   
MessageFromMon   Position   
-
m | p
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/closed.png b/software/raspberry/superviseur-robot/lib/doc/html/closed.png deleted file mode 100644 index 98cc2c909da37a6df914fbf67780eebd99c597f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT diff --git a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h.html b/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h.html deleted file mode 100644 index 57016e4..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h.html +++ /dev/null @@ -1,723 +0,0 @@ - - - - - - - -Bibliotheques TP RT: definitions.h File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
definitions.h File Reference
-
-
- -

Various constants used in destjil project. -More...

-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - -
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define OPEN_COM_DMB   'o'
 
#define CLOSE_COM_DMB   'C'
 
#define DMB_PING   'p'
 
#define DMB_IDLE   'r'
 
#define DMB_START_WITHOUT_WD   'u'
 
#define DMB_START_WITH_WD   'W'
 
#define DMB_RELOAD_WD   'w'
 
#define DMB_GET_VBAT   'v'
 
#define DMB_IS_BUSY   'b'
 
#define DMB_MOVE   'M'
 
#define DMB_TURN   'T'
 
#define DMB_GO_FORWARD   'F'
 
#define DMB_GO_BACK   'B'
 
#define DMB_GO_LEFT   'L'
 
#define DMB_GO_RIGHT   'R'
 
#define DMB_STOP_MOVE   'S'
 
#define ROBOT_TIMED_OUT   -3
 
#define ROBOT_UKNOWN_CMD   -2
 
#define ROBOT_ERROR   -1
 
#define ROBOT_CHECKSUM   -4
 
#define ROBOT_OK   0
 
#define CAM_OPEN   'A'
 
#define CAM_CLOSE   'I'
 
#define CAM_ASK_ARENA   'y'
 
#define CAM_ARENA_CONFIRM   'x'
 
#define CAM_ARENA_INFIRM   'z'
 
#define CAM_COMPUTE_POSITION   'p'
 
#define CAM_STOP_COMPUTE_POSITION   's'
 
#define DMB_BAT_LOW   0
 
#define DMB_BAT_MEDIUM   1
 
#define DMB_BAT_HIGH   2
 
#define DMB_BUSY   1
 
#define DMB_DO_NOTHING   0
 
-

Detailed Description

-

Various constants used in destjil project.

-
Author
PE.Hladik
-
Version
1.0
-
Date
06/06/2017
- -

Definition in file definitions.h.

-

Macro Definition Documentation

- -

◆ CAM_ARENA_CONFIRM

- -
-
- - - - -
#define CAM_ARENA_CONFIRM   'x'
-
- -

Definition at line 57 of file definitions.h.

- -
-
- -

◆ CAM_ARENA_INFIRM

- -
-
- - - - -
#define CAM_ARENA_INFIRM   'z'
-
- -

Definition at line 58 of file definitions.h.

- -
-
- -

◆ CAM_ASK_ARENA

- -
-
- - - - -
#define CAM_ASK_ARENA   'y'
-
- -

Definition at line 56 of file definitions.h.

- -
-
- -

◆ CAM_CLOSE

- -
-
- - - - -
#define CAM_CLOSE   'I'
-
- -

Definition at line 55 of file definitions.h.

- -
-
- -

◆ CAM_COMPUTE_POSITION

- -
-
- - - - -
#define CAM_COMPUTE_POSITION   'p'
-
- -

Definition at line 59 of file definitions.h.

- -
-
- -

◆ CAM_OPEN

- -
-
- - - - -
#define CAM_OPEN   'A'
-
- -

Definition at line 54 of file definitions.h.

- -
-
- -

◆ CAM_STOP_COMPUTE_POSITION

- -
-
- - - - -
#define CAM_STOP_COMPUTE_POSITION   's'
-
- -

Definition at line 60 of file definitions.h.

- -
-
- -

◆ CLOSE_COM_DMB

- -
-
- - - - -
#define CLOSE_COM_DMB   'C'
-
- -

Definition at line 31 of file definitions.h.

- -
-
- -

◆ DMB_BAT_HIGH

- -
-
- - - - -
#define DMB_BAT_HIGH   2
-
- -

Definition at line 64 of file definitions.h.

- -
-
- -

◆ DMB_BAT_LOW

- -
-
- - - - -
#define DMB_BAT_LOW   0
-
- -

Definition at line 62 of file definitions.h.

- -
-
- -

◆ DMB_BAT_MEDIUM

- -
-
- - - - -
#define DMB_BAT_MEDIUM   1
-
- -

Definition at line 63 of file definitions.h.

- -
-
- -

◆ DMB_BUSY

- -
-
- - - - -
#define DMB_BUSY   1
-
- -

Definition at line 66 of file definitions.h.

- -
-
- -

◆ DMB_DO_NOTHING

- -
-
- - - - -
#define DMB_DO_NOTHING   0
-
- -

Definition at line 67 of file definitions.h.

- -
-
- -

◆ DMB_GET_VBAT

- -
-
- - - - -
#define DMB_GET_VBAT   'v'
-
- -

Definition at line 38 of file definitions.h.

- -
-
- -

◆ DMB_GO_BACK

- -
-
- - - - -
#define DMB_GO_BACK   'B'
-
- -

Definition at line 43 of file definitions.h.

- -
-
- -

◆ DMB_GO_FORWARD

- -
-
- - - - -
#define DMB_GO_FORWARD   'F'
-
- -

Definition at line 42 of file definitions.h.

- -
-
- -

◆ DMB_GO_LEFT

- -
-
- - - - -
#define DMB_GO_LEFT   'L'
-
- -

Definition at line 44 of file definitions.h.

- -
-
- -

◆ DMB_GO_RIGHT

- -
-
- - - - -
#define DMB_GO_RIGHT   'R'
-
- -

Definition at line 45 of file definitions.h.

- -
-
- -

◆ DMB_IDLE

- -
-
- - - - -
#define DMB_IDLE   'r'
-
- -

Definition at line 34 of file definitions.h.

- -
-
- -

◆ DMB_IS_BUSY

- -
-
- - - - -
#define DMB_IS_BUSY   'b'
-
- -

Definition at line 39 of file definitions.h.

- -
-
- -

◆ DMB_MOVE

- -
-
- - - - -
#define DMB_MOVE   'M'
-
- -

Definition at line 40 of file definitions.h.

- -
-
- -

◆ DMB_PING

- -
-
- - - - -
#define DMB_PING   'p'
-
- -

Definition at line 33 of file definitions.h.

- -
-
- -

◆ DMB_RELOAD_WD

- -
-
- - - - -
#define DMB_RELOAD_WD   'w'
-
- -

Definition at line 37 of file definitions.h.

- -
-
- -

◆ DMB_START_WITH_WD

- -
-
- - - - -
#define DMB_START_WITH_WD   'W'
-
- -

Definition at line 36 of file definitions.h.

- -
-
- -

◆ DMB_START_WITHOUT_WD

- -
-
- - - - -
#define DMB_START_WITHOUT_WD   'u'
-
- -

Definition at line 35 of file definitions.h.

- -
-
- -

◆ DMB_STOP_MOVE

- -
-
- - - - -
#define DMB_STOP_MOVE   'S'
-
- -

Definition at line 46 of file definitions.h.

- -
-
- -

◆ DMB_TURN

- -
-
- - - - -
#define DMB_TURN   'T'
-
- -

Definition at line 41 of file definitions.h.

- -
-
- -

◆ OPEN_COM_DMB

- -
-
- - - - -
#define OPEN_COM_DMB   'o'
-
- -

Definition at line 30 of file definitions.h.

- -
-
- -

◆ ROBOT_CHECKSUM

- -
-
- - - - -
#define ROBOT_CHECKSUM   -4
-
- -

Definition at line 51 of file definitions.h.

- -
-
- -

◆ ROBOT_ERROR

- -
-
- - - - -
#define ROBOT_ERROR   -1
-
- -

Definition at line 50 of file definitions.h.

- -
-
- -

◆ ROBOT_OK

- -
-
- - - - -
#define ROBOT_OK   0
-
- -

Definition at line 52 of file definitions.h.

- -
-
- -

◆ ROBOT_TIMED_OUT

- -
-
- - - - -
#define ROBOT_TIMED_OUT   -3
-
- -

Definition at line 48 of file definitions.h.

- -
-
- -

◆ ROBOT_UKNOWN_CMD

- -
-
- - - - -
#define ROBOT_UKNOWN_CMD   -2
-
- -

Definition at line 49 of file definitions.h.

- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h.js b/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h.js deleted file mode 100644 index 5bd2440..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h.js +++ /dev/null @@ -1,36 +0,0 @@ -var definitions_8h = -[ - [ "CAM_ARENA_CONFIRM", "definitions_8h.html#a15d9063cd3c60755685ceb75df4a7354", null ], - [ "CAM_ARENA_INFIRM", "definitions_8h.html#ac836c6abc7e32d2cf7f59ed2a8383ca7", null ], - [ "CAM_ASK_ARENA", "definitions_8h.html#a6418778d1f34e618aebd9ca1861ab500", null ], - [ "CAM_CLOSE", "definitions_8h.html#a675009273c3923e8ad1a6d2818063b61", null ], - [ "CAM_COMPUTE_POSITION", "definitions_8h.html#a74fdb9d00556feb699d3c72bd7b5d5e5", null ], - [ "CAM_OPEN", "definitions_8h.html#a2a7149bbe097fae8e799ce2ab6f69390", null ], - [ "CAM_STOP_COMPUTE_POSITION", "definitions_8h.html#ae864cfaefbf5a210e67678b2144a289f", null ], - [ "CLOSE_COM_DMB", "definitions_8h.html#a1b18773c1ce9068c4d38c2cbd2900263", null ], - [ "DMB_BAT_HIGH", "definitions_8h.html#ab34c46794a9de6746a96752668c73754", null ], - [ "DMB_BAT_LOW", "definitions_8h.html#a66c0c4960c1e81c8da8c8e1d4a202352", null ], - [ "DMB_BAT_MEDIUM", "definitions_8h.html#aea6ef1c13db1a8a4a29b065d0c3f73e4", null ], - [ "DMB_BUSY", "definitions_8h.html#a3327443cd321f0c356a5d3d74377892b", null ], - [ "DMB_DO_NOTHING", "definitions_8h.html#a07650c5f6647c5143bac535fdbeb77d5", null ], - [ "DMB_GET_VBAT", "definitions_8h.html#af1737e8fe4da4e8bc2d5db9d26c42462", null ], - [ "DMB_GO_BACK", "definitions_8h.html#a499f41cc19a4459de033687049cbbe71", null ], - [ "DMB_GO_FORWARD", "definitions_8h.html#ae363a29a4961cd8a646a0ca9199bc6cf", null ], - [ "DMB_GO_LEFT", "definitions_8h.html#aefcb838e73a335f1a2a6c914ee2ff752", null ], - [ "DMB_GO_RIGHT", "definitions_8h.html#ad681962f7b8cf4797ebd48be0405d1b9", null ], - [ "DMB_IDLE", "definitions_8h.html#a82b279c49221d3cd3d875d521dfb97b9", null ], - [ "DMB_IS_BUSY", "definitions_8h.html#ad58c241121e685f26a291aa4bd5f9c80", null ], - [ "DMB_MOVE", "definitions_8h.html#ac48dee90eb71d036d001321674abbb8b", null ], - [ "DMB_PING", "definitions_8h.html#acf7d51360dcb103fc57604725ec2816d", null ], - [ "DMB_RELOAD_WD", "definitions_8h.html#a2ca219902014ffb39aab27cca08a948f", null ], - [ "DMB_START_WITH_WD", "definitions_8h.html#adee1628bbc796ba55f4a349895f4e0fa", null ], - [ "DMB_START_WITHOUT_WD", "definitions_8h.html#a5ebbd37042a6244b4f9d473ae7132780", null ], - [ "DMB_STOP_MOVE", "definitions_8h.html#a7308179907a0a2989c162865e7a7979a", null ], - [ "DMB_TURN", "definitions_8h.html#ac6c5492c8100e73f8d30ed36072684db", null ], - [ "OPEN_COM_DMB", "definitions_8h.html#aac798eaf6994ddcadd8a38ad8aba234f", null ], - [ "ROBOT_CHECKSUM", "definitions_8h.html#af1118b8a83d446b4965347bba126a488", null ], - [ "ROBOT_ERROR", "definitions_8h.html#a4aefbbdd5d35999aa0575ab7183148d4", null ], - [ "ROBOT_OK", "definitions_8h.html#ad7b2f95c0b423fb9784acb897b910c36", null ], - [ "ROBOT_TIMED_OUT", "definitions_8h.html#a624686d3af63394ee02f0a197967d44a", null ], - [ "ROBOT_UKNOWN_CMD", "definitions_8h.html#a70a2d5db14b900843364adb7cfe53ac8", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.map deleted file mode 100644 index c63aab4..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.md5 deleted file mode 100644 index b2447d2..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f6420b77d2a0fdb7b89a101437d0222b \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/definitions_8h__dep__incl.png deleted file mode 100644 index f981d80d9c28c0017575b8e70942b0cded9f947f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3498 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 pXS&t@nmqaMnFB-wKt!=qNXc?2Mb - - - - - - -Bibliotheques TP RT: definitions.h Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
definitions.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
27 #ifndef DEFINITIONS_H
28 #define DEFINITIONS_H
29 
30 #define OPEN_COM_DMB 'o'
31 #define CLOSE_COM_DMB 'C'
32 
33 #define DMB_PING 'p'
34 #define DMB_IDLE 'r'
35 #define DMB_START_WITHOUT_WD 'u'
36 #define DMB_START_WITH_WD 'W'
37 #define DMB_RELOAD_WD 'w'
38 #define DMB_GET_VBAT 'v'
39 #define DMB_IS_BUSY 'b'
40 #define DMB_MOVE 'M'
41 #define DMB_TURN 'T'
42 #define DMB_GO_FORWARD 'F'
43 #define DMB_GO_BACK 'B'
44 #define DMB_GO_LEFT 'L'
45 #define DMB_GO_RIGHT 'R'
46 #define DMB_STOP_MOVE 'S'
47 
48 #define ROBOT_TIMED_OUT -3
49 #define ROBOT_UKNOWN_CMD -2
50 #define ROBOT_ERROR -1
51 #define ROBOT_CHECKSUM -4
52 #define ROBOT_OK 0
53 
54 #define CAM_OPEN 'A'
55 #define CAM_CLOSE 'I'
56 #define CAM_ASK_ARENA 'y'
57 #define CAM_ARENA_CONFIRM 'x'
58 #define CAM_ARENA_INFIRM 'z'
59 #define CAM_COMPUTE_POSITION 'p'
60 #define CAM_STOP_COMPUTE_POSITION 's'
61 
62 #define DMB_BAT_LOW 0
63 #define DMB_BAT_MEDIUM 1
64 #define DMB_BAT_HIGH 2
65 
66 #define DMB_BUSY 1
67 #define DMB_DO_NOTHING 0
68 
69 #endif /* MSG_H */
70 
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/software/raspberry/superviseur-robot/lib/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html deleted file mode 100644 index ba86990..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Bibliotheques TP RT: src Directory Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
src Directory Reference
-
-
- - - - - - - - - - - - - - - - -

-Files

file  image.cpp [code]
 Fonctions de traitement d'image utilisable pour la détection du robot.
 
file  message.cpp [code]
 Functions for sending message to monitor.
 
file  monitor.cpp [code]
 Library for sending message to monitor or receiving message.
 
file  robot.cpp [code]
 
file  server.cpp [code]
 Library for opening a TCP server, receiving data and sending message to monitor.
 
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/software/raspberry/superviseur-robot/lib/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js deleted file mode 100644 index b7c5ab2..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js +++ /dev/null @@ -1,8 +0,0 @@ -var dir_68267d1309a1af8e8297ef4c3efbcdba = -[ - [ "image.cpp", "image_8cpp.html", "image_8cpp" ], - [ "message.cpp", "message_8cpp.html", "message_8cpp" ], - [ "monitor.cpp", "monitor_8cpp.html", "monitor_8cpp" ], - [ "robot.cpp", "robot_8cpp.html", "robot_8cpp" ], - [ "server.cpp", "server_8cpp.html", "server_8cpp" ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/doc.png b/software/raspberry/superviseur-robot/lib/doc/html/doc.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/software/raspberry/superviseur-robot/lib/doc/html/doxygen.css b/software/raspberry/superviseur-robot/lib/doc/html/doxygen.css deleted file mode 100644 index 4f1ab91..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/doxygen.css +++ /dev/null @@ -1,1596 +0,0 @@ -/* The standard CSS for doxygen 1.8.13 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 0px; - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtitle { - padding: 8px; - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #E2E8F2; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: 400; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #DFE5F1; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -} - -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -.arrow { - color: #9CAFD4; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #728DC1; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -dl -{ - padding: 0 0 0 10px; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ -dl.section -{ - margin-left: 0px; - padding-left: 0px; -} - -dl.note -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00D000; -} - -dl.deprecated -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #505050; -} - -dl.todo -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00C0E0; -} - -dl.test -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #3030E0; -} - -dl.bug -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.plantumlgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - -/* @group Markdown */ - -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - - -/* @end */ diff --git a/software/raspberry/superviseur-robot/lib/doc/html/doxygen.png b/software/raspberry/superviseur-robot/lib/doc/html/doxygen.png deleted file mode 100644 index 3ff17d807fd8aa003bed8bb2a69e8f0909592fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/dynsections.js b/software/raspberry/superviseur-robot/lib/doc/html/dynsections.js deleted file mode 100644 index 1e6bf07..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/dynsections.js +++ /dev/null @@ -1,104 +0,0 @@ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -Bibliotheques TP RT: File List - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
File List
-
-
-
Here is a list of all files with brief descriptions:
- - - - - - - -
 definitions.hVarious constants used in destjil project
 image.hFunctions for image treatment
 message.hFunctions for sending message to monitor
 monitor.hLibrary for sending message to monitor or receiving message
 robot.hFonctions for communicating with robot
 server.hLibrary for opening a TCP server, receiving data and sending message to monitor
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/files.js b/software/raspberry/superviseur-robot/lib/doc/html/files.js deleted file mode 100644 index f86eaca..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/files.js +++ /dev/null @@ -1,9 +0,0 @@ -var files = -[ - [ "definitions.h", "definitions_8h.html", "definitions_8h" ], - [ "image.h", "image_8h.html", "image_8h" ], - [ "message.h", "message_8h.html", "message_8h" ], - [ "monitor.h", "monitor_8h.html", "monitor_8h" ], - [ "robot.h", "robot_8h.html", "robot_8h" ], - [ "server.h", "server_8h.html", "server_8h" ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/folderclosed.png b/software/raspberry/superviseur-robot/lib/doc/html/folderclosed.png deleted file mode 100644 index bb8ab35edce8e97554e360005ee9fc5bffb36e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA diff --git a/software/raspberry/superviseur-robot/lib/doc/html/functions.html b/software/raspberry/superviseur-robot/lib/doc/html/functions.html deleted file mode 100644 index e609b89..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/functions.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Class Members - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/functions_vars.html b/software/raspberry/superviseur-robot/lib/doc/html/functions_vars.html deleted file mode 100644 index 0df06be..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/functions_vars.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Class Members - Variables - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/globals.html b/software/raspberry/superviseur-robot/lib/doc/html/globals.html deleted file mode 100644 index 3d2daf4..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/globals.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - -Bibliotheques TP RT: File Members - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- a -

- - -

- c -

- - -

- d -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- i -

- - -

- j -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- w -

-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/globals_defs.html b/software/raspberry/superviseur-robot/lib/doc/html/globals_defs.html deleted file mode 100644 index 7d928d5..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/globals_defs.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - -Bibliotheques TP RT: File Members - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- c -

- - -

- d -

- - -

- h -

- - -

- i -

- - -

- n -

- - -

- o -

- - -

- r -

- - -

- s -

- - -

- w -

-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/globals_func.html b/software/raspberry/superviseur-robot/lib/doc/html/globals_func.html deleted file mode 100644 index 457f629..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/globals_func.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - -Bibliotheques TP RT: File Members - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/globals_type.html b/software/raspberry/superviseur-robot/lib/doc/html/globals_type.html deleted file mode 100644 index 30eae68..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/globals_type.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Bibliotheques TP RT: File Members - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/globals_vars.html b/software/raspberry/superviseur-robot/lib/doc/html/globals_vars.html deleted file mode 100644 index 282556a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/globals_vars.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Bibliotheques TP RT: File Members - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/graph_legend.html b/software/raspberry/superviseur-robot/lib/doc/html/graph_legend.html deleted file mode 100644 index 3ce4503..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/graph_legend.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Graph Legend - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Graph Legend
-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

/*! Invisible class because of truncation */
class Invisible { };
/*! Truncated class, inheritance relation is hidden */
class Truncated : public Invisible { };
/* Class not documented with doxygen comments */
class Undocumented { };
/*! Class that is inherited using public inheritance */
class PublicBase : public Truncated { };
/*! A template class */
template<class T> class Templ { };
/*! Class that is inherited using protected inheritance */
class ProtectedBase { };
/*! Class that is inherited using private inheritance */
class PrivateBase { };
/*! Class that is used by the Inherited class */
class Used { };
/*! Super class that inherits a number of other classes */
class Inherited : public PublicBase,
protected ProtectedBase,
private PrivateBase,
public Undocumented,
public Templ<int>
{
private:
Used *m_usedClass;
};

This will result in the following graph:

-
- -
-

The boxes in the above graph have the following meaning:

-
    -
  • -A filled gray box represents the struct or class for which the graph is generated.
  • -
  • -A box with a black border denotes a documented struct or class.
  • -
  • -A box with a gray border denotes an undocumented struct or class.
  • -
  • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • -
-

The arrows have the following meaning:

-
    -
  • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • -
  • -A dark green arrow is used for protected inheritance.
  • -
  • -A dark red arrow is used for private inheritance.
  • -
  • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • -
  • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • -
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/graph_legend.md5 b/software/raspberry/superviseur-robot/lib/doc/html/graph_legend.md5 deleted file mode 100644 index a06ed05..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/graph_legend.md5 +++ /dev/null @@ -1 +0,0 @@ -387ff8eb65306fa251338d3c9bd7bfff \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/graph_legend.png b/software/raspberry/superviseur-robot/lib/doc/html/graph_legend.png deleted file mode 100644 index 81788d8b778e11ebf43d6a041820fcaf7ec9a65e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19465 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%0Av4SqcN@e|5`jp~UDrU|Bek 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 - - - - - - -Bibliotheques TP RT: src/image.cpp File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
image.cpp File Reference
-
-
- -

Fonctions de traitement d'image utilisable pour la détection du robot. -More...

-
#include "image.h"
-#include <iostream>
-
-Include dependency graph for image.cpp:
-
-
- - - -
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

float calculAngle (Position *positionRobot)
 
int cropArena (Image *imgInput, Image *imgOutput, Arene *AreneInput)
 
float euclideanDist (Point &p, Point &q)
 
void draw_arena (Image *imgInput, Image *imgOutput, Arene *monArene)
 Dessine le plus petit rectangle contenant l'arène. More...
 
int open_camera (Camera *camera)
 Ouvre une camera. More...
 
void get_image (Camera *camera, Image *monImage, const char *fichier)
 Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image. More...
 
void close_camera (Camera *camera)
 Ferme la camera passé en paramètre. More...
 
int detect_arena (Image *monImage, Arene *rectangle)
 Détecte une arène dans une image fournis en paramètre. More...
 
void compress_image (Image *imgInput, Jpg *imageCompress)
 Détecte la position d'un robot. More...
 
int detect_position (Image *imgInput, Position *posTriangle, Arene *monArene)
 Détecte la position d'un robot. More...
 
void draw_position (Image *imgInput, Image *imgOutput, Position *positionRobot)
 Dessine sur une image en entrée la position d'un robot et sa direction. More...
 
-

Detailed Description

-

Fonctions de traitement d'image utilisable pour la détection du robot.

-
Author
L.Senaneuch
-
Version
1.0
-
Date
06/06/2017
-

Ce fichier utilise la libraire openCV2 pour faciliter le traitement d'image dans le projet Destijl. Il permet de faciliter la détection de l'arène et la détection du robot. /!\ Attention Bien que celui-ci soit un .cpp la structure du code n'est pas sous forme d'objet.

- -

Definition in file image.cpp.

-

Function Documentation

- -

◆ calculAngle()

- -
-
- - - - - - - - -
float calculAngle (PositionpositionRobot)
-
- -

Definition at line 253 of file image.cpp.

- -
-
- -

◆ close_camera()

- -
-
- - - - - - - - -
void close_camera (Cameracamera)
-
- -

Ferme la camera passé en paramètre.

-
Parameters
- - -
*CameraPointeur sur la camera à fermer
-
-
- -

Definition at line 112 of file image.cpp.

- -
-
- -

◆ compress_image()

- -
-
- - - - - - - - - - - - - - - - - - -
void compress_image (ImageimgInput,
JpgimageCompress 
)
-
- -

Détecte la position d'un robot.

-

Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer.

-
Parameters
- - - -
*imgInputPointeur sur l'image à sauvegarder en mémoire sous format jpg.
*imageCompressPointeur sur une image .jpg.
-
-
- -

Definition at line 164 of file image.cpp.

- -
-
- -

◆ cropArena()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int cropArena (ImageimgInput,
ImageimgOutput,
AreneAreneInput 
)
-
- -

Definition at line 150 of file image.cpp.

- -
-
- -

◆ detect_arena()

- -
-
- - - - - - - - - - - - - - - - - - -
int detect_arena (ImagemonImage,
Arenerectangle 
)
-
- -

Détecte une arène dans une image fournis en paramètre.

-
Parameters
- - - -
*monImagePointeur sur l'image d'entrée
*rectanglePointeur sur les coordonnées du rectangles trouvé.
-
-
-
Returns
Retourne -1 si aucune arène n'est détectée. Sinon retourne 0
- -

Definition at line 126 of file image.cpp.

- -
-
- -

◆ detect_position()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int detect_position (ImageimgInput,
PositionposTriangle,
ArenemonArene = NULL 
)
-
- -

Détecte la position d'un robot.

-

Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer.

-
Parameters
- - - - -
*imgInputPointeur sur l'image sur laquelle chercher la position du des robots.
*posTrianglePointeur sur un tableau de position ou seront stocké les positions des triangles détectés.
*monArenePointeur de type Arène si nécessaire d'affiner la recherche (optionnel)
-
-
-
Returns
Le nombre de triangles détectés.
- -

Definition at line 170 of file image.cpp.

- -
-
- -

◆ draw_arena()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void draw_arena (ImageimgInput,
ImageimgOutput,
ArenemonArene 
)
-
- -

Dessine le plus petit rectangle contenant l'arène.

-
Parameters
- - - - -
*imgInputPointeur sur l'image d'entrée.
*imgOutputPointeur sur l'image de sortie (image d'entrée + arène marquée)
*monArenePointeur de type Arène contenant les information à dessiner
-
-
- -

Definition at line 51 of file image.cpp.

- -
-
- -

◆ draw_position()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void draw_position (ImageimgInput,
ImageimgOutput,
PositionpositionRobot 
)
-
- -

Dessine sur une image en entrée la position d'un robot et sa direction.

-

Sauvegarde l'image des coordonnées passées par positionRobot superposée à l'image d'entrée sur imgOutput.

-
Parameters
- - - - -
*imgInputPointeur sur l'image d'entrée
*imgOutputPointeur sur l'image de sortie ( image d'entrée + dessin de la position)
*positionRobotPointeur sur la structure position d'un robot.
-
-
- -

Definition at line 244 of file image.cpp.

- -
-
- -

◆ euclideanDist()

- -
-
- - - - - - - - - - - - - - - - - - -
float euclideanDist (Point & p,
Point & q 
)
-
- -

Definition at line 159 of file image.cpp.

- -
-
- -

◆ get_image()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void get_image (Cameracamera,
ImagemonImage,
const char * fichier = NULL 
)
-
- -

Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image.

-

La camera doit préalablement être ouverte via openCamera(...)

-
Parameters
- - - - -
*CameraPointeur sur la camera passée en entrée.
*monImagePointeur sur une image capturée.
*fichierchemin du fichier d'image
-
-
-
Returns
Retourne -1 si une erreur survient.
- -

Definition at line 93 of file image.cpp.

- -
-
- -

◆ open_camera()

- -
-
- - - - - - - - -
int open_camera (Cameracamera)
-
- -

Ouvre une camera.

-

Met à jour le descripteur de fichier passé en paramètre pour correspondre à la camera ouverte

-
Parameters
- - -
*CameraPointeur d'un file descriptor d'une camera ouverte
-
-
-
Returns
retourne 0 si la camera a été ouverte correctement et -1 si une erreur survient.
- -

Definition at line 58 of file image.cpp.

- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp.js b/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp.js deleted file mode 100644 index 7f75d1a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp.js +++ /dev/null @@ -1,14 +0,0 @@ -var image_8cpp = -[ - [ "calculAngle", "image_8cpp.html#afe015c86402c7d09d9d7b28587c7fd1b", null ], - [ "close_camera", "image_8cpp.html#a19eac11a04cb4b86fd32e6a36445ad5d", null ], - [ "compress_image", "image_8cpp.html#a909ca7577f0ac2e4bd0ea21291690dce", null ], - [ "cropArena", "image_8cpp.html#a41fa265b5f57fcd2a13e726880297d12", null ], - [ "detect_arena", "image_8cpp.html#acad45df4061a55f17be0db97c1406249", null ], - [ "detect_position", "image_8cpp.html#ac813f76084a0d9d252fb5c01830ab7df", null ], - [ "draw_arena", "image_8cpp.html#a5ffd032a466af45a505fb46252194bbf", null ], - [ "draw_position", "image_8cpp.html#a869c3946d4a414b8730ca4f91fbd9556", null ], - [ "euclideanDist", "image_8cpp.html#a73f53d1da08f1f8123da89585d16c7ef", null ], - [ "get_image", "image_8cpp.html#a864afddf57678b37b99d9eca70405d63", null ], - [ "open_camera", "image_8cpp.html#aca0662ab31eac7fdb2d64fecc52ff1da", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.map deleted file mode 100644 index 2c1582b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.md5 deleted file mode 100644 index 1fa5ecc..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8d1fd0d08f8afb309e7fa9c4bc3d5303 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/image_8cpp__incl.png deleted file mode 100644 index a22f156a7a6aa397165137b65b3e1277b1199b5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13225 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 - - - - - - -Bibliotheques TP RT: src/image.cpp Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
image.cpp
-
-
-Go to the documentation of this file.
1 
2 /*
3  * Copyright (C) 2018 dimercur
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
31 #include "image.h"
32 #include <iostream>
33 
34 using namespace cv;
35 #ifndef __STUB__
36 #ifdef __FOR_PC__
37 VideoCapture cap;
38 #else
39 using namespace raspicam;
40 #endif /* __FOR_PC__ */
41 #else
42 Image stubImg;
43 
44 #endif
45 using namespace std;
46 
47 float calculAngle(Position * positionRobot);
48 int cropArena(Image *imgInput, Image *imgOutput, Arene *AreneInput);
49 float euclideanDist(Point& p, Point& q);
50 
51 void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene)
52 {
53  if(imgInput!=imgOutput)
54  *imgOutput=imgInput->clone();
55  rectangle(*imgOutput,monArene->tl(),monArene->br(),Scalar(0,0,125),2,8,0);
56 }
57 
58 int open_camera(Camera *camera)
59 {
60 #ifndef __STUB__
61 #ifdef __FOR_PC__
62  // open the default camera, use something different from 0 otherwise;
63  // Check VideoCapture documentation.
64  printf("Opening Camera...\n");
65  if(!cap.open(0))
66  return -1;
67 
68  return 0;
69 #else // for raspberry
70 
71  camera->set(CV_CAP_PROP_FORMAT, CV_8UC3);
72  camera->set(CV_CAP_PROP_FRAME_WIDTH,WIDTH);
73  camera->set(CV_CAP_PROP_FRAME_HEIGHT,HEIGHT);
74 
75  printf("Opening Camera...\n");
76  if (!(camera->open())) {
77  perror("Can't open Camera\n") ;
78  return -1;
79  }
80  else
81  {
82  printf("Camera warmup 2sec\n");
83  sleep(2);
84  printf("Start capture\n");
85  return 0;
86  }
87 #endif /* __FOR_PC__ */
88 #else
89  return 0;
90 #endif
91 }
92 
93 void get_image(Camera *camera, Image * monImage, const char * fichier) // getImg(Camera, Image img);
94 {
95 #ifndef __STUB__
96 #ifdef __FOR_PC__
97  if (monImage != NULL)
98  {
99  cap>>*monImage;
100  }
101 #else // for raspberry
102  camera->grab();
103  camera->retrieve(*monImage);
104  cvtColor(*monImage,*monImage,CV_BGR2RGB);
105 #endif /* __FOR_PC__ */
106 #else
107  stubImg = imread(fichier, CV_LOAD_IMAGE_COLOR);
108  stubImg.copyTo(*monImage);
109 #endif
110 }
111 
112 void close_camera(Camera *camera) // closeCam(Camera) : camera Entrer
113 {
114 #ifndef __STUB__
115 #ifdef __FOR_PC__
116  cap.release();
117 #else // for raspberry
118  camera->release();
119 #endif /* __FOR_PC__ */
120 #else
121 
122 #endif
123 }
124 
125 
126 int detect_arena(Image *monImage, Arene *rectangle) // Image en entrée // rectangle en sortie
127 {
128  vector<vector<Point> > contours;
129  vector<Point> approx;
130  vector<Vec4i> hierarchy;
131 
132  Image imageTrt;
133  cvtColor(*monImage,imageTrt,CV_RGB2GRAY); // conversion en niveau de gris
134  threshold(imageTrt,imageTrt,128,255,CV_THRESH_BINARY); // Threshold les éléments les plus clair
135  Canny(imageTrt, imageTrt, 100,200,3); // detection d'angle
136 
137  findContours(imageTrt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
138  for(unsigned int i = 0; i < contours.size();i++)
139  {
140  approxPolyDP(Image(contours[i]), approx, arcLength(Image(contours[i]), true)*0.1, true);
141  if(approx.size()==4 && fabs(cv::contourArea(contours[i])) > 100000)
142  {
143  *rectangle = boundingRect(Image(contours[i]));
144  return 0;
145  }
146  }
147  return -1;
148 }
149 
150 int cropArena(Image *imgInput, Image *imgOutput, Arene *areneInput) // image // rectangle // image2
151 {
152  Image img;
153  img=imgInput->clone();
154 
155  *imgOutput = img(*areneInput);
156  return 0;
157 }
158 
159 float euclideanDist(Point& p, Point& q) {
160  Point diff = p - q;
161  return cv::sqrt(diff.x*diff.x + diff.y*diff.y);
162 }
163 
164 void compress_image(Image *imgInput, Jpg *imageCompress) // image entrée // imageEncodé en sortie
165 {
166  imencode(".jpg",*imgInput,*imageCompress);
167 }
168 
169 
170 int detect_position(Image *imgInput, Position *posTriangle, Arene * monArene) // entree : image / sortie tab pos
171 {
172  vector<vector<Point> > contours;
173  vector<Point> approx;
174  vector<Vec4i> hierarchy;
175 
176  Image imgTraitment;
177 
178  if(monArene==NULL)
179  imgTraitment=imgInput->clone();
180  else
181  cropArena(imgInput,&imgTraitment, monArene);
182 
183  cvtColor(imgTraitment,imgTraitment,CV_RGB2GRAY);
184  threshold(imgTraitment,imgTraitment,128,255,CV_THRESH_BINARY);
185  findContours(imgTraitment, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
186 
187  int nbrTriangle = 0;
188  for(unsigned int i = 0;i < contours.size();i++)
189  {
190  approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]), true)*0.17, true);
191  if(approx.size() == 3 && fabs(contourArea(contours[i])) > 200 && fabs(contourArea(contours[i])) < 700)
192  {
193 
194  Point a,b,c;
195  Point center;
196 
197 
198  a = approx[0];
199  b = approx[1];
200  c = approx[2];
201 
202 
203  if(monArene !=NULL) // ajout de l'offset de l'arène
204  {
205  a.x += monArene->x;
206  a.y += monArene->y;
207  b.x += monArene->x;
208  b.y += monArene->y;
209  c.x += monArene->x;
210  c.y += monArene->y;
211  }
212 
213  center.x = (a.x + b.x + c.x)/3;
214  center.y = (a.y + b.y + c.y)/3;
215 
216  posTriangle[nbrTriangle].center=center;
217 
218  if(euclideanDist(center,b) > euclideanDist(center,a) && euclideanDist(center,b) > euclideanDist(center,c) )
219  {
220 
221  posTriangle[nbrTriangle].direction=b;
222  //line(img,center,b,Scalar(0,125,0),2,8,0);
223  }
224  else if(euclideanDist(center,a) > euclideanDist(center,c))
225  {
226  posTriangle[nbrTriangle].direction=a;
227  //line(img,center,a,Scalar(0,125,0),2,8,0);
228 
229  }
230  else
231  {
232  posTriangle[nbrTriangle].direction=c;
233  //line(img,center,c,Scalar(0,125,0),2,8,0);
234  }
235  posTriangle[nbrTriangle].angle=calculAngle(&posTriangle[nbrTriangle]);
236 
237  nbrTriangle++;
238 
239  }
240  }
241  return nbrTriangle;
242 }
243 
244 void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot) // img E/S pos : E
245 {
246  if(imgInput!=imgOutput)
247  {
248  *imgOutput=imgInput->clone();
249  }
250  line(*imgOutput,positionRobot->center,positionRobot->direction,Scalar(0,125,0),2,8,0);
251 }
252 
253 float calculAngle(Position * positionRobot) // position en entree
254 {
255  float a = positionRobot->direction.x - positionRobot->center.x;
256  float b = positionRobot->direction.y - positionRobot->center.y ;
257  float angle = atan2(b,a);
258  return angle * 180.f/M_PI;
259 
260 }
void compress_image(Image *imgInput, Jpg *imageCompress)
Détecte la position d&#39;un robot.
Definition: image.cpp:164
-
void get_image(Camera *camera, Image *monImage, const char *fichier)
Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une...
Definition: image.cpp:93
-
Point center
Definition: image.h:70
-
float angle
Definition: image.h:72
-
#define WIDTH
Definition: image.h:44
-
void close_camera(Camera *camera)
Ferme la camera passé en paramètre.
Definition: image.cpp:112
-
int cropArena(Image *imgInput, Image *imgOutput, Arene *AreneInput)
Definition: image.cpp:150
-
Rect Arene
Definition: image.h:66
- -
Mat Image
Definition: image.h:55
- -
int detect_arena(Image *monImage, Arene *rectangle)
Détecte une arène dans une image fournis en paramètre.
Definition: image.cpp:126
-
int open_camera(Camera *camera)
Ouvre une camera.
Definition: image.cpp:58
-
Functions for image treatment.
-
Definition: image.h:69
-
int detect_position(Image *imgInput, Position *posTriangle, Arene *monArene)
Détecte la position d&#39;un robot.
Definition: image.cpp:170
-
void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene)
Dessine le plus petit rectangle contenant l&#39;arène.
Definition: image.cpp:51
-
float euclideanDist(Point &p, Point &q)
Definition: image.cpp:159
-
vector< unsigned char > Jpg
Definition: image.h:67
-
RaspiCam_Cv Camera
Definition: image.h:58
- -
float calculAngle(Position *positionRobot)
Definition: image.cpp:253
-
#define HEIGHT
Definition: image.h:45
-
void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot)
Dessine sur une image en entrée la position d&#39;un robot et sa direction.
Definition: image.cpp:244
-
Point direction
Definition: image.h:71
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8h.html b/software/raspberry/superviseur-robot/lib/doc/html/image_8h.html deleted file mode 100644 index 6fbd968..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8h.html +++ /dev/null @@ -1,598 +0,0 @@ - - - - - - - -Bibliotheques TP RT: image.h File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
image.h File Reference
-
-
- -

Functions for image treatment. -More...

-
#include <raspicam/raspicam_cv.h>
-#include "opencv2/imgproc/imgproc.hpp"
-#include <unistd.h>
-#include <math.h>
-
-Include dependency graph for image.h:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  Position
 
- - - - - -

-Macros

#define WIDTH   480
 
#define HEIGHT   360
 
- - - - - - - - - -

-Typedefs

typedef Mat Image
 
typedef RaspiCam_Cv Camera
 
typedef Rect Arene
 
typedef vector< unsigned char > Jpg
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

int open_camera (Camera *camera)
 Ouvre une camera. More...
 
void close_camera (Camera *camera)
 Ferme la camera passé en paramètre. More...
 
void get_image (Camera *camera, Image *monImage, const char *fichier=NULL)
 Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image. More...
 
int detect_arena (Image *monImage, Arene *rectangle)
 Détecte une arène dans une image fournis en paramètre. More...
 
void draw_arena (Image *imgInput, Image *imgOutput, Arene *monArene)
 Dessine le plus petit rectangle contenant l'arène. More...
 
int detect_position (Image *imgInput, Position *posTriangle, Arene *monArene=NULL)
 Détecte la position d'un robot. More...
 
void draw_position (Image *imgInput, Image *imgOutput, Position *positionRobot)
 Dessine sur une image en entrée la position d'un robot et sa direction. More...
 
void compress_image (Image *imgInput, Jpg *imageCompress)
 Détecte la position d'un robot. More...
 
-

Detailed Description

-

Functions for image treatment.

-
Author
L.Senaneuch
-
Version
1.0
-
Date
06/06/2017
-

This file use openCV2 library for picture processing. This allow to detect arena and robot.

- -

Definition in file image.h.

-

Macro Definition Documentation

- -

◆ HEIGHT

- -
-
- - - - -
#define HEIGHT   360
-
- -

Definition at line 45 of file image.h.

- -
-
- -

◆ WIDTH

- -
-
- - - - -
#define WIDTH   480
-
- -

Definition at line 44 of file image.h.

- -
-
-

Typedef Documentation

- -

◆ Arene

- -
-
- - - - -
typedef Rect Arene
-
- -

Definition at line 66 of file image.h.

- -
-
- -

◆ Camera

- -
-
- - - - -
typedef RaspiCam_Cv Camera
-
- -

Definition at line 58 of file image.h.

- -
-
- -

◆ Image

- -
-
- - - - -
typedef Mat Image
-
- -

Definition at line 55 of file image.h.

- -
-
- -

◆ Jpg

- -
-
- - - - -
typedef vector<unsigned char> Jpg
-
- -

Definition at line 67 of file image.h.

- -
-
-

Function Documentation

- -

◆ close_camera()

- -
-
- - - - - - - - -
void close_camera (Cameracamera)
-
- -

Ferme la camera passé en paramètre.

-
Parameters
- - -
cameraPointeur sur la camera à fermer
-
-
- -
-
- -

◆ compress_image()

- -
-
- - - - - - - - - - - - - - - - - - -
void compress_image (ImageimgInput,
JpgimageCompress 
)
-
- -

Détecte la position d'un robot.

-

Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer.

-
Parameters
- - - -
imgInputPointeur sur l'image à sauvegarder en mémoire sous format jpg.
imageCompressPointeur sur une image .jpg.
-
-
- -
-
- -

◆ detect_arena()

- -
-
- - - - - - - - - - - - - - - - - - -
int detect_arena (ImagemonImage,
Arenerectangle 
)
-
- -

Détecte une arène dans une image fournis en paramètre.

-
Parameters
- - - -
monImagePointeur sur l'image d'entrée
rectanglePointeur sur les coordonnées du rectangles trouvé.
-
-
-
Returns
Retourne -1 si aucune arène n'est détectée. Sinon retourne 0
- -
-
- -

◆ detect_position()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int detect_position (ImageimgInput,
PositionposTriangle,
ArenemonArene = NULL 
)
-
- -

Détecte la position d'un robot.

-

Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer.

-
Parameters
- - - - -
imgInputPointeur sur l'image sur laquelle chercher la position du des robots.
posTrianglePointeur sur un tableau de position ou seront stocké les positions des triangles détectés.
monArenePointeur de type Arène si nécessaire d'affiner la recherche (optionnel)
-
-
-
Returns
Le nombre de triangles détectés.
- -
-
- -

◆ draw_arena()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void draw_arena (ImageimgInput,
ImageimgOutput,
ArenemonArene 
)
-
- -

Dessine le plus petit rectangle contenant l'arène.

-
Parameters
- - - - -
imgInputPointeur sur l'image d'entrée.
imgOutputPointeur sur l'image de sortie (image d'entrée + arène marquée)
monArenePointeur de type Arène contenant les information à dessiner
-
-
- -
-
- -

◆ draw_position()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void draw_position (ImageimgInput,
ImageimgOutput,
PositionpositionRobot 
)
-
- -

Dessine sur une image en entrée la position d'un robot et sa direction.

-

Sauvegarde l'image des coordonnées passées par positionRobot superposée à l'image d'entrée sur imgOutput.

-
Parameters
- - - - -
imgInputPointeur sur l'image d'entrée
imgOutputPointeur sur l'image de sortie ( image d'entrée + dessin de la position)
positionRobotPointeur sur la structure position d'un robot.
-
-
- -
-
- -

◆ get_image()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void get_image (Cameracamera,
ImagemonImage,
const char * fichier = NULL 
)
-
- -

Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image.

-

La camera doit préalablement être ouverte via openCamera(...)

-
Parameters
- - - - -
cameraPointeur sur la camera passée en entrée.
monImagePointeur sur une image capturée.
fichierChemin du fichier d'image
-
-
-
Returns
Retourne -1 si une erreur survient.
- -
-
- -

◆ open_camera()

- -
-
- - - - - - - - -
int open_camera (Cameracamera)
-
- -

Ouvre une camera.

-

Met à jour le descripteur de fichier passé en paramètre pour correspondre à la camera ouverte

-
Parameters
- - -
cameraPointeur d'un file descriptor d'une camera ouverte
-
-
-
Returns
Retourne 0 si la camera a été ouverte correctement et -1 si une erreur survient.
- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8h.js b/software/raspberry/superviseur-robot/lib/doc/html/image_8h.js deleted file mode 100644 index a0e4d8a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8h.js +++ /dev/null @@ -1,18 +0,0 @@ -var image_8h = -[ - [ "Position", "struct_position.html", "struct_position" ], - [ "HEIGHT", "image_8h.html#aed89bd71aee8be823e8a20ec4e093c1e", null ], - [ "WIDTH", "image_8h.html#a241aeeb764887ae5e3de58b98f04b16d", null ], - [ "Arene", "image_8h.html#aa856a7cb8a1535c9f13096bede6c8586", null ], - [ "Camera", "image_8h.html#a739dda3f6f6ddbab22617837b43a692a", null ], - [ "Image", "image_8h.html#a466446fef9c0348568bc6743186d1a38", null ], - [ "Jpg", "image_8h.html#a9ac2855e21920c676a108df386ff9415", null ], - [ "close_camera", "image_8h.html#a19eac11a04cb4b86fd32e6a36445ad5d", null ], - [ "compress_image", "image_8h.html#a909ca7577f0ac2e4bd0ea21291690dce", null ], - [ "detect_arena", "image_8h.html#acad45df4061a55f17be0db97c1406249", null ], - [ "detect_position", "image_8h.html#af9f6e2dd4409486f2f6446d1a8a02c40", null ], - [ "draw_arena", "image_8h.html#a5ffd032a466af45a505fb46252194bbf", null ], - [ "draw_position", "image_8h.html#a869c3946d4a414b8730ca4f91fbd9556", null ], - [ "get_image", "image_8h.html#ad904f3348c2d44f9c82435c94cd83844", null ], - [ "open_camera", "image_8h.html#aca0662ab31eac7fdb2d64fecc52ff1da", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.map deleted file mode 100644 index ad8be09..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.md5 deleted file mode 100644 index 4bfff62..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6d313bbb80eb53df241801f919256cc4 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/image_8h__dep__incl.png deleted file mode 100644 index ca003767990846dca1d21b840ce4b741e052aebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.map deleted file mode 100644 index f61b8e0..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.md5 deleted file mode 100644 index 6bc96f3..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -be279fa48d3144e7371470f8b4a81b94 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/image_8h__incl.png deleted file mode 100644 index 63e6ec9eca4de5e8f0ed52c6f8195b5757a15d02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8285 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 YXqB - - - - - - -Bibliotheques TP RT: image.h Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
image.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
28 #ifndef _IMAGE_H_
29 #define _IMAGE_H_
30 
31 #ifndef __STUB__
32 #ifndef __FOR_PC__
33 #include <raspicam/raspicam_cv.h>
34 #else
35 #include <opencv2/highgui/highgui.hpp>
36 #endif /* __FOR_PC__ */
37 #else
38 #include <opencv2/highgui/highgui.hpp>
39 #endif
40 #include "opencv2/imgproc/imgproc.hpp"
41 #include <unistd.h>
42 #include <math.h>
43 
44 #define WIDTH 480 //1280 1024 640 480
45 #define HEIGHT 360 // 960 768 480 360
46 
47 using namespace std;
48 using namespace cv;
49 #ifndef __STUB__
50 #ifndef __FOR_PC__
51 using namespace raspicam;
52 #endif /* __FOR_PC__ */
53 #endif
54 
55 typedef Mat Image;
56 #ifndef __STUB__
57 #ifndef __FOR_PC__
58 typedef RaspiCam_Cv Camera;
59 #else
60 typedef int Camera;
61 #endif /* __FOR_PC__ */
62 #else
63 typedef int Camera;
64 #endif
65 
66 typedef Rect Arene;
67 typedef vector<unsigned char> Jpg;
68 
69 struct Position {
70  Point center;
71  Point direction;
72  float angle;
73 };
74 
82 int open_camera(Camera *camera);
83 
89 void close_camera(Camera *camera);
90 
100 void get_image(Camera *camera, Image * monImage, const char *fichier = NULL);
101 
109 int detect_arena(Image *monImage, Arene *rectangle);
110 
118 void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene);
119 
129 int detect_position(Image *imgInput, Position *posTriangle, Arene * monArene = NULL);
130 
139 void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot);
140 
148 void compress_image(Image *imgInput, Jpg *imageCompress);
149 
150 #endif // _IMAGE_H_
Point center
Definition: image.h:70
-
float angle
Definition: image.h:72
-
void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot)
Dessine sur une image en entrée la position d&#39;un robot et sa direction.
-
Rect Arene
Definition: image.h:66
-
int open_camera(Camera *camera)
Ouvre une camera.
-
void close_camera(Camera *camera)
Ferme la camera passé en paramètre.
- -
Mat Image
Definition: image.h:55
-
int detect_position(Image *imgInput, Position *posTriangle, Arene *monArene=NULL)
Détecte la position d&#39;un robot.
- -
void get_image(Camera *camera, Image *monImage, const char *fichier=NULL)
Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une...
-
Definition: image.h:69
-
vector< unsigned char > Jpg
Definition: image.h:67
-
void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene)
Dessine le plus petit rectangle contenant l&#39;arène.
-
RaspiCam_Cv Camera
Definition: image.h:58
-
void compress_image(Image *imgInput, Jpg *imageCompress)
Détecte la position d&#39;un robot.
- -
int detect_arena(Image *monImage, Arene *rectangle)
Détecte une arène dans une image fournis en paramètre.
-
Point direction
Definition: image.h:71
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/index.html b/software/raspberry/superviseur-robot/lib/doc/html/index.html deleted file mode 100644 index 7637cf7..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/index.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Main Page - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Bibliotheques TP RT Documentation
-
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/jquery.js b/software/raspberry/superviseur-robot/lib/doc/html/jquery.js deleted file mode 100644 index f5343ed..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/jquery.js +++ /dev/null @@ -1,87 +0,0 @@ -/*! - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! - * jQuery UI 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! - * jQuery UI Widget 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! - * jQuery UI Mouse 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' - - -
- -
-
message.cpp File Reference
-
-
- -

Functions for sending message to monitor. -More...

-
#include "message.h"
-
-Include dependency graph for message.cpp:
-
-
- - - -
-
-

Go to the source code of this file.

-
- - - - - - - - - -

-Functions

void set_msgToMon_header (MessageToMon *msg, char *header)
 
void set_msgToMon_data (MessageToMon *msg, void *data)
 
void free_msgToMon_data (MessageToMon *msg)
 
void print_msgToMon (MessageToMon *msg)
 
-

Detailed Description

-

Functions for sending message to monitor.

-
Author
PE.Hladik
-
Version
1.0
-
Date
06/06/2017
- -

Definition in file message.cpp.

-

Function Documentation

- -

◆ free_msgToMon_data()

- -
-
- - - - - - - - -
void free_msgToMon_data (MessageToMonmsg)
-
- -

Definition at line 40 of file message.cpp.

- -
-
- -

◆ print_msgToMon()

- -
-
- - - - - - - - -
void print_msgToMon (MessageToMonmsg)
-
- -

Definition at line 46 of file message.cpp.

- -
-
- -

◆ set_msgToMon_data()

- -
-
- - - - - - - - - - - - - - - - - - -
void set_msgToMon_data (MessageToMonmsg,
void * data 
)
-
- -

Definition at line 32 of file message.cpp.

- -
-
- -

◆ set_msgToMon_header()

- -
-
- - - - - - - - - - - - - - - - - - -
void set_msgToMon_header (MessageToMonmsg,
char * header 
)
-
- -

Definition at line 28 of file message.cpp.

- -
-
- - - - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp.js b/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp.js deleted file mode 100644 index 7291dec..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp.js +++ /dev/null @@ -1,7 +0,0 @@ -var message_8cpp = -[ - [ "free_msgToMon_data", "message_8cpp.html#a285193a5a9d3b142f3f1c53c471d3173", null ], - [ "print_msgToMon", "message_8cpp.html#ae409e822d69cee7483a2d41c62698a85", null ], - [ "set_msgToMon_data", "message_8cpp.html#aa938f8156bfca7379f533b751334ca6f", null ], - [ "set_msgToMon_header", "message_8cpp.html#a8c768ba3ccfd64ba1e39079c967aff26", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.map deleted file mode 100644 index de5e1b6..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.md5 deleted file mode 100644 index 37edc4c..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a433a31a7bc3c2aef43f09a76b51be72 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/message_8cpp__incl.png deleted file mode 100644 index 128eb061d53cb31b286ad3b19ced00ccaf69943f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10285 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 - - - - - - -Bibliotheques TP RT: src/message.cpp Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
message.cpp
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
26 #include "message.h"
27 
28 void set_msgToMon_header(MessageToMon *msg, char *header) {
29  memcpy(msg->header, header, sizeof (header));
30 }
31 
32 void set_msgToMon_data(MessageToMon *msg, void * data) {
33  if (msg->data != NULL) {
34  free(msg->data);
35  }
36  msg->data = malloc(sizeof (data));
37  memcpy(msg->data, data, sizeof (data));
38 }
39 
41  if (msg->data != NULL) {
42  free(msg->data);
43  }
44 }
45 
47  printf("header: %s\n", msg->header);
48  printf("data: %s\n", (char*)msg->data);
49 }
void * data
Definition: message.h:36
-
void set_msgToMon_header(MessageToMon *msg, char *header)
Definition: message.cpp:28
- -
Functions for sending message to monitor.
-
void free_msgToMon_data(MessageToMon *msg)
Definition: message.cpp:40
-
void set_msgToMon_data(MessageToMon *msg, void *data)
Definition: message.cpp:32
-
void print_msgToMon(MessageToMon *msg)
Definition: message.cpp:46
-
char header[4]
Definition: message.h:35
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h.html b/software/raspberry/superviseur-robot/lib/doc/html/message_8h.html deleted file mode 100644 index 60686fb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8h.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - -Bibliotheques TP RT: message.h File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
message.h File Reference
-
-
- -

Functions for sending message to monitor. -More...

-
#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-Include dependency graph for message.h:
-
-
-
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  MessageToMon
 
- - - - - - - - - - - - - -

-Functions

void set_msgToMon_header (MessageToMon *msg, char *header)
 Set header part of monitor message. More...
 
void set_msgToMon_data (MessageToMon *msg, void *data)
 Set data part of monitor message. More...
 
void free_msgToMon_data (MessageToMon *msg)
 Dealocate moemory pointed by data part of message. More...
 
void print_msgToMon (MessageToMon *msg)
 Print message, header and data. More...
 
-

Detailed Description

-

Functions for sending message to monitor.

-
Author
PE.Hladik
-
Version
1.0
-
Date
06/06/2017
- -

Definition in file message.h.

-

Function Documentation

- -

◆ free_msgToMon_data()

- -
-
- - - - - - - - -
void free_msgToMon_data (MessageToMonmsg)
-
- -

Dealocate moemory pointed by data part of message.

- -
-
- -

◆ print_msgToMon()

- -
-
- - - - - - - - -
void print_msgToMon (MessageToMonmsg)
-
- -

Print message, header and data.

- -
-
- -

◆ set_msgToMon_data()

- -
-
- - - - - - - - - - - - - - - - - - -
void set_msgToMon_data (MessageToMonmsg,
void * data 
)
-
- -

Set data part of monitor message.

- -
-
- -

◆ set_msgToMon_header()

- -
-
- - - - - - - - - - - - - - - - - - -
void set_msgToMon_header (MessageToMonmsg,
char * header 
)
-
- -

Set header part of monitor message.

- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h.js b/software/raspberry/superviseur-robot/lib/doc/html/message_8h.js deleted file mode 100644 index f86e346..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8h.js +++ /dev/null @@ -1,8 +0,0 @@ -var message_8h = -[ - [ "MessageToMon", "struct_message_to_mon.html", "struct_message_to_mon" ], - [ "free_msgToMon_data", "message_8h.html#a285193a5a9d3b142f3f1c53c471d3173", null ], - [ "print_msgToMon", "message_8h.html#ae409e822d69cee7483a2d41c62698a85", null ], - [ "set_msgToMon_data", "message_8h.html#aa938f8156bfca7379f533b751334ca6f", null ], - [ "set_msgToMon_header", "message_8h.html#a8c768ba3ccfd64ba1e39079c967aff26", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.map deleted file mode 100644 index 060d5dc..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.md5 deleted file mode 100644 index dfa0241..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c1360d1270504b5d3b306b1d19fd7c40 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/message_8h__dep__incl.png deleted file mode 100644 index 8451547bb3b46927d1dc60b65ffaf3877d1866b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3010 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.map deleted file mode 100644 index 4409cbb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.md5 deleted file mode 100644 index aabbc0c..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ebcc455136b13afe425b1f9aff59117a \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/message_8h__incl.png deleted file mode 100644 index 243f16f8a7d799eaa90c06101a65018e17a00a22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7100 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/message_8h_source.html b/software/raspberry/superviseur-robot/lib/doc/html/message_8h_source.html deleted file mode 100644 index c335eae..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/message_8h_source.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Bibliotheques TP RT: message.h Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
message.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
26 #ifndef MESSAGE_H
27 #define MESSAGE_H
28 
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <unistd.h>
32 #include <string.h>
33 
34 typedef struct {
35  char header[4];
36  void *data = NULL;
37 } MessageToMon;
38 
43 void set_msgToMon_header(MessageToMon *msg, char *header);
44 
48 void set_msgToMon_data(MessageToMon *msg, void *data);
49 
54 
58 void print_msgToMon(MessageToMon *msg);
59 
60 #endif /* MESSAGE_H */
61 
-
void set_msgToMon_header(MessageToMon *msg, char *header)
Set header part of monitor message.
-
void free_msgToMon_data(MessageToMon *msg)
Dealocate moemory pointed by data part of message.
-
void set_msgToMon_data(MessageToMon *msg, void *data)
Set data part of monitor message.
-
void print_msgToMon(MessageToMon *msg)
Print message, header and data.
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp.html b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp.html deleted file mode 100644 index 236cc89..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp.html +++ /dev/null @@ -1,352 +0,0 @@ - - - - - - - -Bibliotheques TP RT: src/monitor.cpp File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
monitor.cpp File Reference
-
-
- -

Library for sending message to monitor or receiving message. -More...

-
#include "monitor.h"
-#include "server.h"
-
-Include dependency graph for monitor.cpp:
-
-
- - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Functions

string serverReceive (int size)
 
int sendMessage (const char *data, int dataLength)
 
int receive (char *data)
 
int send_message_to_monitor (const char *typeMessage, const void *data)
 Envoi d'un message vers l'interface graphique. More...
 
int receive_message_from_monitor (char *typeMessage, char *data)
 Réception d'un message. La fonction est bloquante et retourne par référence le type de message reçu (DMB pour un ordre au robot, ARN pour la détection des arènes et POS pour un calcul de position) ainsi que les données associées. More...
 
- - - - - - - -

-Variables

SOCKADDR_IN ssin
 
SOCKET sock
 
socklen_t recsize = sizeof (ssin)
 
-

Detailed Description

-

Library for sending message to monitor or receiving message.

-
Author
L.senaneuch
-
Version
1.0
-
Date
06/06/2017
- -

Definition in file monitor.cpp.

-

Function Documentation

- -

◆ receive()

- -
-
- - - - - - - - -
int receive (char * data)
-
- -

Definition at line 90 of file monitor.cpp.

- -
-
- -

◆ receive_message_from_monitor()

- -
-
- - - - - - - - - - - - - - - - - - -
int receive_message_from_monitor (char * typeMessage,
char * data 
)
-
- -

Réception d'un message. La fonction est bloquante et retourne par référence le type de message reçu (DMB pour un ordre au robot, ARN pour la détection des arènes et POS pour un calcul de position) ainsi que les données associées.

-
Parameters
- - - -
typeMessageType du message reçu : DMB pour un ordre au robot, ARN pour la demande de détection de l'arène, POS pour un calcul de position et MSG pour un message de l'interface
datadonnées associées au message reçu.
-
-
-
Returns
retourne 0 la taille du message reçu ou une valeur négative si la connexion est perdue.
- -

Definition at line 83 of file monitor.cpp.

- -
-
- -

◆ send_message_to_monitor()

- -
-
- - - - - - - - - - - - - - - - - - -
int send_message_to_monitor (const char * typeMessage,
const void * data = NULL 
)
-
- -

Envoi d'un message vers l'interface graphique.

-
Parameters
- - - -
typeMessageType du message envoyé. Les valeurs possibles sont IMG pour une image, MES pour un message à afficher dans la console, POS pour la position du robot, BAT pour une valeur de la batterie et ACK pour valider un message de l'interface.
datadonnées associées au message. Le type de la donnée doit correspondre au message : Image pour IMG, char * MES, Position pour POS, char * pour BAT et rien pour ACK. Attention, il n'y a aucune vérification a posterio.
-
-
-
Returns
retourne 0 si l'envoie a bien été réalisé et -1 en cas de problème.
- -

Definition at line 40 of file monitor.cpp.

- -
-
- -

◆ sendMessage()

- -
-
- - - - - - - - - - - - - - - - - - -
int sendMessage (const char * data,
int dataLength 
)
-
- -

Definition at line 97 of file monitor.cpp.

- -
-
- -

◆ serverReceive()

- -
-
- - - - - - - - -
string serverReceive (int size)
-
- -
-
-

Variable Documentation

- -

◆ recsize

- -
-
- - - - -
socklen_t recsize = sizeof (ssin)
-
- -

Definition at line 33 of file monitor.cpp.

- -
-
- -

◆ sock

- -
-
- - - - -
SOCKET sock
-
- -

Definition at line 32 of file monitor.cpp.

- -
-
- -

◆ ssin

- -
-
- - - - -
SOCKADDR_IN ssin
-
- -

Definition at line 31 of file monitor.cpp.

- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp.js b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp.js deleted file mode 100644 index f8cf8e1..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp.js +++ /dev/null @@ -1,11 +0,0 @@ -var monitor_8cpp = -[ - [ "receive", "monitor_8cpp.html#aef87d80a1e44bf1953b3282967282ef0", null ], - [ "receive_message_from_monitor", "monitor_8cpp.html#a61eca0d5b49118350db39583e1bd1032", null ], - [ "send_message_to_monitor", "monitor_8cpp.html#af49d46447ce41019bd13a2c07a000644", null ], - [ "sendMessage", "monitor_8cpp.html#a7265ec937de7d9ca68b81e5bd8203962", null ], - [ "serverReceive", "monitor_8cpp.html#a04c8d7ed93b301fafe6dcc08d64ba21b", null ], - [ "recsize", "monitor_8cpp.html#acd1a03adb2455aaacbd886642518d569", null ], - [ "sock", "monitor_8cpp.html#a6e91849780a994f2adde299b33642829", null ], - [ "ssin", "monitor_8cpp.html#a1f38ae3a59ce304779ebbca10378654a", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.map deleted file mode 100644 index 3ac074b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.md5 deleted file mode 100644 index 9e15c25..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4999ec1ece0fdb669cb1fb59d50df9ee \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp__incl.png deleted file mode 100644 index 9ef496394437bf10171f114ca648ff9c97f7f2b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37992 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp_source.html b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp_source.html deleted file mode 100644 index 23bf7f4..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8cpp_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Bibliotheques TP RT: src/monitor.cpp Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
monitor.cpp
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
26 #include "monitor.h"
27 #include "server.h"
28 
29 using namespace std;
30 
33 socklen_t recsize = sizeof (ssin);
34 
35 
36 string serverReceive(int size);
37 int sendMessage(const char *data, int dataLength);
38 int receive(char *data);
39 
40 int send_message_to_monitor(const char* typeMessage, const void * data) {
41  if ((string) typeMessage == HEADER_STM_IMAGE) {
42  Jpg * imgC = (Jpg*) data;
43  sendMessage("IMG", 3);
44  sendMessage((const char*) imgC->data(), imgC->size());
45  sendMessage("TRAME", 5);
46  return 0;
47  } else if ((string) typeMessage == HEADER_STM_POS) {
48  char buffer[400];
49  Position * maPosition = (Position*) data;
50  sprintf(buffer, "POScenter: %3d;%3d | %.1fTRAME", maPosition->center.x, maPosition->center.y, maPosition->angle);
51  sendMessage(buffer, strlen(buffer));
52  return 0;
53  } else if ((string) typeMessage == HEADER_STM_MES) {
54  char buffer[50];
55  sprintf(buffer, "MSG%sTRAME", (const char*) data);
56  sendMessage(buffer, strlen(buffer));
57  return 0;
58  } else if ((string) typeMessage == HEADER_STM_ACK) {
59  char buffer[50];
60  sprintf(buffer, "ACK%sTRAME", (const char*) data);
61  sendMessage(buffer, strlen(buffer));
62  return 0;
63  } else if ((string) typeMessage == HEADER_STM_BAT) {
64  char buffer[50];
65  sprintf(buffer, "BAT%sTRAME", (const char*) data);
66  sendMessage(buffer, strlen(buffer));
67  return 0;
68  } else if ((string) typeMessage == HEADER_STM_NO_ACK) {
69  char buffer[50];
70  sprintf(buffer, "NAK%sTRAME", (const char*) data);
71  sendMessage(buffer, strlen(buffer));
72  return 0;
73  } else if ((string) typeMessage == HEADER_STM_LOST_DMB) {
74  char buffer[50];
75  sprintf(buffer, "LCD%sTRAME", (const char*) data);
76  sendMessage(buffer, strlen(buffer));
77  return 0;
78  } else {
79  return -1;
80  }
81 }
82 
83 int receive_message_from_monitor(char *typeMessage, char *data) {
84  char buffer[20];
85  int tBuffer = receive(buffer);
86  sscanf(buffer, "%3s:%s", typeMessage, data);
87  return tBuffer;
88 }
89 
90 int receive(char *data) {
91  int result;
92  result = receiveDataFromServer(data, 20);
93  //cout <<"Data : " << data << endl;
94  return result;
95 }
96 
97 int sendMessage(const char *data, int dataLength) {
98  if (sendDataToServer((char*) data, dataLength) != dataLength) {
99  perror("Send failed : ");
100  return false;
101  }
102 
103  return true;
104 }
Point center
Definition: image.h:70
-
#define HEADER_STM_POS
Definition: monitor.h:43
-
float angle
Definition: image.h:72
-
int receive(char *data)
Definition: monitor.cpp:90
-
int SOCKET
Definition: monitor.h:70
-
#define HEADER_STM_NO_ACK
Definition: monitor.h:44
-
#define HEADER_STM_ACK
Definition: monitor.h:45
- -
int receive_message_from_monitor(char *typeMessage, char *data)
Réception d&#39;un message. La fonction est bloquante et retourne par référence le type de message reçu (...
Definition: monitor.cpp:83
-
int send_message_to_monitor(const char *typeMessage, const void *data)
Envoi d&#39;un message vers l&#39;interface graphique.
Definition: monitor.cpp:40
-
#define HEADER_STM_LOST_DMB
Definition: monitor.h:47
-
#define HEADER_STM_BAT
Definition: monitor.h:42
-
socklen_t recsize
Definition: monitor.cpp:33
- -
Definition: image.h:69
-
SOCKADDR_IN ssin
Definition: monitor.cpp:31
-
int sendMessage(const char *data, int dataLength)
Definition: monitor.cpp:97
-
vector< unsigned char > Jpg
Definition: image.h:67
-
int receiveDataFromServer(char *data, int size)
Definition: server.cpp:95
-
#define HEADER_STM_MES
Definition: monitor.h:46
-
int sendDataToServer(char *data, int length)
Definition: server.cpp:85
-
SOCKET sock
Definition: monitor.cpp:32
-
struct sockaddr_in SOCKADDR_IN
Definition: monitor.h:71
-
Library for sending message to monitor or receiving message.
-
string serverReceive(int size)
-
#define HEADER_STM_IMAGE
Definition: monitor.h:41
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h.html b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h.html deleted file mode 100644 index c5f6229..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h.html +++ /dev/null @@ -1,692 +0,0 @@ - - - - - - - -Bibliotheques TP RT: monitor.h File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
monitor.h File Reference
-
-
- -

Library for sending message to monitor or receiving message. -More...

-
#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "image.h"
-#include "definitions.h"
-
-Include dependency graph for monitor.h:
-
-
- - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  MessageFromMon
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define HEADER_STM_IMAGE   "IMG"
 
#define HEADER_STM_BAT   "BAT"
 
#define HEADER_STM_POS   "POS"
 
#define HEADER_STM_NO_ACK   "NAK"
 
#define HEADER_STM_ACK   "ACK"
 
#define HEADER_STM_MES   "MSG"
 
#define HEADER_STM_LOST_DMB   "LCD"
 
#define HEADER_MTS_MSG   "MSG"
 
#define HEADER_MTS_DMB_ORDER   "DMB"
 
#define HEADER_MTS_COM_DMB   "COM"
 
#define HEADER_MTS_CAMERA   "CAM"
 
#define HEADER_MTS_STOP   "STO"
 
#define INVALID_SOCKET   -1
 
#define SOCKET_ERROR   -1
 
#define DEFAULT_PORT   8080
 
#define DEFAULT_PARITY   0
 
#define DETECT_ARENA   (1)
 
#define CHECK_ARENA   (2)
 
#define NO_ARENA   (3)
 
#define DEFAULT_NODEJS_PATH   "/usr/bin/nodejs"
 
#define DEFAULT_INTERFACE_FILE   "./interface.js"
 
#define closesocket(param)   close(param)
 
- - - - - - - -

-Typedefs

typedef int SOCKET
 
typedef struct sockaddr_in SOCKADDR_IN
 
typedef struct sockaddr SOCKADDR
 
- - - - - - - -

-Functions

int send_message_to_monitor (const char *typeMessage, const void *data=NULL)
 Envoi d'un message vers l'interface graphique. More...
 
int receive_message_from_monitor (char *typeMessage, char *data)
 Réception d'un message. La fonction est bloquante et retourne par référence le type de message reçu (DMB pour un ordre au robot, ARN pour la détection des arènes et POS pour un calcul de position) ainsi que les données associées. More...
 
-

Detailed Description

-

Library for sending message to monitor or receiving message.

-
Author
L.senaneuch
-
Version
1.0
-
Date
06/06/2017
- -

Definition in file monitor.h.

-

Macro Definition Documentation

- -

◆ CHECK_ARENA

- -
-
- - - - -
#define CHECK_ARENA   (2)
-
- -

Definition at line 62 of file monitor.h.

- -
-
- -

◆ closesocket

- -
-
- - - - - - - - -
#define closesocket( param)   close(param)
-
- -

Definition at line 68 of file monitor.h.

- -
-
- -

◆ DEFAULT_INTERFACE_FILE

- -
-
- - - - -
#define DEFAULT_INTERFACE_FILE   "./interface.js"
-
- -

Definition at line 66 of file monitor.h.

- -
-
- -

◆ DEFAULT_NODEJS_PATH

- -
-
- - - - -
#define DEFAULT_NODEJS_PATH   "/usr/bin/nodejs"
-
- -

Definition at line 65 of file monitor.h.

- -
-
- -

◆ DEFAULT_PARITY

- -
-
- - - - -
#define DEFAULT_PARITY   0
-
- -

Definition at line 59 of file monitor.h.

- -
-
- -

◆ DEFAULT_PORT

- -
-
- - - - -
#define DEFAULT_PORT   8080
-
- -

Definition at line 58 of file monitor.h.

- -
-
- -

◆ DETECT_ARENA

- -
-
- - - - -
#define DETECT_ARENA   (1)
-
- -

Definition at line 61 of file monitor.h.

- -
-
- -

◆ HEADER_MTS_CAMERA

- -
-
- - - - -
#define HEADER_MTS_CAMERA   "CAM"
-
- -

Definition at line 52 of file monitor.h.

- -
-
- -

◆ HEADER_MTS_COM_DMB

- -
-
- - - - -
#define HEADER_MTS_COM_DMB   "COM"
-
- -

Definition at line 51 of file monitor.h.

- -
-
- -

◆ HEADER_MTS_DMB_ORDER

- -
-
- - - - -
#define HEADER_MTS_DMB_ORDER   "DMB"
-
- -

Definition at line 50 of file monitor.h.

- -
-
- -

◆ HEADER_MTS_MSG

- -
-
- - - - -
#define HEADER_MTS_MSG   "MSG"
-
- -

Definition at line 49 of file monitor.h.

- -
-
- -

◆ HEADER_MTS_STOP

- -
-
- - - - -
#define HEADER_MTS_STOP   "STO"
-
- -

Definition at line 53 of file monitor.h.

- -
-
- -

◆ HEADER_STM_ACK

- -
-
- - - - -
#define HEADER_STM_ACK   "ACK"
-
- -

Definition at line 45 of file monitor.h.

- -
-
- -

◆ HEADER_STM_BAT

- -
-
- - - - -
#define HEADER_STM_BAT   "BAT"
-
- -

Definition at line 42 of file monitor.h.

- -
-
- -

◆ HEADER_STM_IMAGE

- -
-
- - - - -
#define HEADER_STM_IMAGE   "IMG"
-
- -

Definition at line 41 of file monitor.h.

- -
-
- -

◆ HEADER_STM_LOST_DMB

- -
-
- - - - -
#define HEADER_STM_LOST_DMB   "LCD"
-
- -

Definition at line 47 of file monitor.h.

- -
-
- -

◆ HEADER_STM_MES

- -
-
- - - - -
#define HEADER_STM_MES   "MSG"
-
- -

Definition at line 46 of file monitor.h.

- -
-
- -

◆ HEADER_STM_NO_ACK

- -
-
- - - - -
#define HEADER_STM_NO_ACK   "NAK"
-
- -

Definition at line 44 of file monitor.h.

- -
-
- -

◆ HEADER_STM_POS

- -
-
- - - - -
#define HEADER_STM_POS   "POS"
-
- -

Definition at line 43 of file monitor.h.

- -
-
- -

◆ INVALID_SOCKET

- -
-
- - - - -
#define INVALID_SOCKET   -1
-
- -

Definition at line 55 of file monitor.h.

- -
-
- -

◆ NO_ARENA

- -
-
- - - - -
#define NO_ARENA   (3)
-
- -

Definition at line 63 of file monitor.h.

- -
-
- -

◆ SOCKET_ERROR

- -
-
- - - - -
#define SOCKET_ERROR   -1
-
- -

Definition at line 56 of file monitor.h.

- -
-
-

Typedef Documentation

- -

◆ SOCKADDR

- -
-
- - - - -
typedef struct sockaddr SOCKADDR
-
- -

Definition at line 72 of file monitor.h.

- -
-
- -

◆ SOCKADDR_IN

- -
-
- - - - -
typedef struct sockaddr_in SOCKADDR_IN
-
- -

Definition at line 71 of file monitor.h.

- -
-
- -

◆ SOCKET

- -
-
- - - - -
typedef int SOCKET
-
- -

Definition at line 70 of file monitor.h.

- -
-
-

Function Documentation

- -

◆ receive_message_from_monitor()

- -
-
- - - - - - - - - - - - - - - - - - -
int receive_message_from_monitor (char * typeMessage,
char * data 
)
-
- -

Réception d'un message. La fonction est bloquante et retourne par référence le type de message reçu (DMB pour un ordre au robot, ARN pour la détection des arènes et POS pour un calcul de position) ainsi que les données associées.

-
Parameters
- - - -
typeMessageType du message reçu : DMB pour un ordre au robot, ARN pour la demande de détection de l'arène, POS pour un calcul de position et MSG pour un message de l'interface
datadonnées associées au message reçu.
-
-
-
Returns
Retourne 0 la taille du message reçu ou une valeur négative si la connexion est perdue.
- -
-
- -

◆ send_message_to_monitor()

- -
-
- - - - - - - - - - - - - - - - - - -
int send_message_to_monitor (const char * typeMessage,
const void * data = NULL 
)
-
- -

Envoi d'un message vers l'interface graphique.

-
Parameters
- - - -
typeMessageType du message envoyé. Les valeurs possibles sont IMG pour une image, MES pour un message à afficher dans la console, POS pour la position du robot, BAT pour une valeur de la batterie et ACK pour valider un message de l'interface.
datadonnées associées au message. Le type de la donnée doit correspondre au message : Image pour IMG, char * MES, Position pour POS, char * pour BAT et rien pour ACK. Attention, il n'y a aucune vérification a posterio.
-
-
-
Returns
Retourne 0 si l'envoie a bien été réalisé et -1 en cas de problème.
- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h.js b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h.js deleted file mode 100644 index 2b37a12..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h.js +++ /dev/null @@ -1,31 +0,0 @@ -var monitor_8h = -[ - [ "MessageFromMon", "struct_message_from_mon.html", "struct_message_from_mon" ], - [ "CHECK_ARENA", "monitor_8h.html#a22d20ac264e03c59d6941cb11386aa89", null ], - [ "closesocket", "monitor_8h.html#ab6b45251e218af8f09c5d627b5262398", null ], - [ "DEFAULT_INTERFACE_FILE", "monitor_8h.html#af533d8bd7d6a1d9f9efba3b259280e32", null ], - [ "DEFAULT_NODEJS_PATH", "monitor_8h.html#a2c47b710f0858fe41c544517c6b2a2fd", null ], - [ "DEFAULT_PARITY", "monitor_8h.html#a939612a13947b5bb9fc848e3222a231d", null ], - [ "DEFAULT_PORT", "monitor_8h.html#a16b710f592bf8f7900666392adc444dc", null ], - [ "DETECT_ARENA", "monitor_8h.html#ab3be9ae187e8b98bb000ca0bca68e982", null ], - [ "HEADER_MTS_CAMERA", "monitor_8h.html#a91e2658cf20010646211ba748885c180", null ], - [ "HEADER_MTS_COM_DMB", "monitor_8h.html#a0c829d92889c5c9b2d485964ce933fab", null ], - [ "HEADER_MTS_DMB_ORDER", "monitor_8h.html#a5ccd30e6502bb94eaa13a597edb1f156", null ], - [ "HEADER_MTS_MSG", "monitor_8h.html#a980e8f9457e30018fddcd4d997f17a85", null ], - [ "HEADER_MTS_STOP", "monitor_8h.html#a2be30c9a3e65eaf5502b8542a6ac6259", null ], - [ "HEADER_STM_ACK", "monitor_8h.html#af2325d19ae9da4310eb608c744149f53", null ], - [ "HEADER_STM_BAT", "monitor_8h.html#a0de226ae5af8b83f3b163ff4413eef95", null ], - [ "HEADER_STM_IMAGE", "monitor_8h.html#ad62b697bd25a71d171db46740aef2830", null ], - [ "HEADER_STM_LOST_DMB", "monitor_8h.html#afe29ce74d16751828da8aec7e13ad06b", null ], - [ "HEADER_STM_MES", "monitor_8h.html#ac1034bccb09918cccd3ba142377a6788", null ], - [ "HEADER_STM_NO_ACK", "monitor_8h.html#ac2e64478522da4e3b45c139c0c72557f", null ], - [ "HEADER_STM_POS", "monitor_8h.html#a6a07aae2539981459edc8070a0f019db", null ], - [ "INVALID_SOCKET", "monitor_8h.html#a26769957ec1a2beaf223f33b66ee64ab", null ], - [ "NO_ARENA", "monitor_8h.html#a1d58e03abc2a587c7f0a0665c94c0e68", null ], - [ "SOCKET_ERROR", "monitor_8h.html#a633b0396ff93d336a088412a190a5072", null ], - [ "SOCKADDR", "monitor_8h.html#ae334b73cedf7204187dce3f817576009", null ], - [ "SOCKADDR_IN", "monitor_8h.html#a29046dc0232f0e5c70adbc25090d77b8", null ], - [ "SOCKET", "monitor_8h.html#a8dc8083897335125630f1af5dafd5831", null ], - [ "receive_message_from_monitor", "monitor_8h.html#a61eca0d5b49118350db39583e1bd1032", null ], - [ "send_message_to_monitor", "monitor_8h.html#ac3d876b96642b6ee46f6a96b7ffcb864", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.map deleted file mode 100644 index a3a58b4..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.md5 deleted file mode 100644 index 2f64a62..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d46874b82f54f2c9defe2fbbe4cec067 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__dep__incl.png deleted file mode 100644 index 8680c1c8b02c6082fa7779979aeb853123d0e18d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2648 zcmb`JdpK148pjt&h&>6LElh-_a%WuHsW8a60_nJ~y~ zMM&;6hK9;L)3`HkGdXMTbDrm%ef~brdVcHo{MK5(^}cJp@B8__@#bcRd_1B&008hA z-9T7^a~L@MxH!S{RRGckPMj{rh6v#3&*M3%EDZp7_>2%b*1>rz`C&J#sS-WyG}m+S zraj%rO9Dc?8_<^RsOMK+$R6j@?luq8bt~FWw%i6}V8!2bwxu(?kq`R)Y3An}N?b73 z1rj}mDao>Qv)=>52V7_SnXAz0Nn&pf+GMwX-X1EFO`=q-9aOU>S4h-X=qp(48|UA0 z3u$(NlQCN6Jh2JoVuf~=Qqjw)=ibeiqL2;@8aTu z=zSI+|C?>4kW5&y6SAqcRxvd-6#$@D!=rSI{LuP?u@@#IA|fVQ9-RlGu)`F}(riLr zqQjrNbZ+1NC6GSB7OVSPak12u@V!$;Mn-m|Q26HNX3P+6Cp1qJ&CV0cj>MnNQgrNI zU$0Bq`ZjWo{;Bb#_jr|#jt(2p*SYtZ6vhU8r_@5>V^eEgiNX^No&utxqE+KZ%>75G z=~l9fNl-_%>#^&mrhE!_nxm#)2hDwI^nO`Uq3h$Lz@Se?gPZR=If2n!oze<;{CH** zZ>)))HdZ$QX8n#t-Y~|Ko z@N>$_{Fdc{eVOvdfNue<&@ZQ?KqC(Z^SFWa%}qipFQBchtt6Vn#mg%=e*F0HqRL8R zJI3xVbYw{4nd@NTwJ$!H5EBRl64xD|?sJ~X@7|xyrl_cxctrDPw0G_SfSW`0rUSVC zkwCGa4Af#-`pUvWY<9Lt-nB>xadGis54HCL1NtZwJ^K~si4&2qtsktzJ?8#a^WqFD z0yzn!;Bah_k&!P-OQlp*1rmRj*Y)=&bg~`{6(qfXeSTBC3{RB9@ljk{}UsWIzC85=v+e)MD1Ai4L10HN{Iy|&rHN7{G%W%Bb`*k?Z(1O(L8tGJX;jBQvq8LxTf$CRe=zlrd_f%*?C{y%q&hl5^PUu0MEbUfXwIRE`nF^eL}=;P^9 zKPpW?;tAw;==)yY-e?B>cI88Lw@Vqw5uRCWqWt9FxD`X~_3`!Xc_#jAo{FuvcjbDn zq#Rf~WG}cNPpnmUYOkxN-&X+mxd7b}d2-a8k(` zp4M(Tde4k`Z(B*mCL}yfPKM~}=~>v>aeY0C>;3QnDQ8y)kjdotgM$WseoE}@>~)X7 z+ivgdaBCG_ebUk3Id(P!$p%PBNWfsQ>(SX&FB z5`E+DDDCKBRuEw<;x&)l1oi; zbVEr6_V)H%fQ+?n2b!UZOt8{hYufGJ38L9u&_u6rDPtKfuyah z;Jqm|+^qf`eq2|WYLiNPVU}6ht8YQHj~8;c)OM4Slgkzt-9tC$xntwvtUxiERyVAl zs|}ta93C9pxR^1zzqMpkOA#2Mh`(`F;qIbPC<6Qz2n0tt*{f&`WO{i+gSFkg_6Y5r z?QO0;;ALy;?^rBY^3@8&hKAwwbtNO|(_SDe4l*+{ErWxbQ><)k;Kha7lMK)o%I-vN zS>qoUGd{T2vY_o0_Cxup4%aZ855~cyB}F9QZjo;QyRqfyy6~ zk8Wt%P?8k(sIRYw$;lxeJUHL_`t{86GPkeq8h;_REkyMv@ylQya;m}MlJfGV6R@Dw zskfkPMtX$DBc8r{hoDo55YZ&gq@*Ox@I56X-2cNAOevVObWEvPJ`#t+1uPAUONoX^h>408S5?XJ@bF0G zm>7Vqz{jyMz0S_ghR_`vf6LyN7BX(3pg`gi!R_Qgo>m(Bv11ohRnssS44rYl1r8AnIQnMX}3)pz@!{EDd#iFj=aHWPmu1Ir6vRyGDU67(jmgqOk|dG*c@4bd+K zED)sYbIdD#lV;sue9Ozr@B8F(HKWd-%j!cfkK&byrW}7GnYyo_?^N?h&SO7WuCUz^ zLuOxrhOdM=YT~Syj@U-_uR%4Yk^QXoi=FGxdv4qcxsv~C!DicwEx&i5nTeq81Avjf L8KOql>FGZKEh-+L diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.map deleted file mode 100644 index 89823df..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.md5 deleted file mode 100644 index 87065f1..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c1de6fe6f1b534c65a34631cbb9641a2 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/monitor_8h__incl.png deleted file mode 100644 index 2ab2aec4a3e47d94c2bd418365b2240698ebecdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32969 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 - - - - - - -Bibliotheques TP RT: monitor.h Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
monitor.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
26 #ifndef _MONITOR_H_
27 #define _MONITOR_H_
28 
29 #include <sys/types.h>
30 #include <sys/socket.h>
31 #include <netinet/in.h>
32 #include <arpa/inet.h>
33 #include <unistd.h>
34 #include <signal.h>
35 #include <stdlib.h>
36 #include <stdio.h>
37 #include <string.h>
38 #include "image.h"
39 #include "definitions.h"
40 
41 #define HEADER_STM_IMAGE "IMG" // Envoi d'une image
42 #define HEADER_STM_BAT "BAT" // Envoi de l'état de la batterie
43 #define HEADER_STM_POS "POS" // Envoi de la position
44 #define HEADER_STM_NO_ACK "NAK" // Acquittement d'un échec
45 #define HEADER_STM_ACK "ACK" // Acquittement d'un succès
46 #define HEADER_STM_MES "MSG" // Message textuel
47 #define HEADER_STM_LOST_DMB "LCD" // Perte de la communication avec le robot
48 
49 #define HEADER_MTS_MSG "MSG" // Message directe pour Console Dumber
50 #define HEADER_MTS_DMB_ORDER "DMB" // Message d'ordre pour le robot
51 #define HEADER_MTS_COM_DMB "COM" // Message de gestion de la communication avec le robot
52 #define HEADER_MTS_CAMERA "CAM" // Message de gestion de la camera
53 #define HEADER_MTS_STOP "STO" // Message d'arrêt du system
54 
55 #define INVALID_SOCKET -1
56 #define SOCKET_ERROR -1
57 
58 #define DEFAULT_PORT 8080
59 #define DEFAULT_PARITY 0
60 
61 #define DETECT_ARENA (1)
62 #define CHECK_ARENA (2)
63 #define NO_ARENA (3)
64 
65 #define DEFAULT_NODEJS_PATH "/usr/bin/nodejs"
66 #define DEFAULT_INTERFACE_FILE "./interface.js"
67 
68 #define closesocket(param) close(param)
69 
70 typedef int SOCKET;
71 typedef struct sockaddr_in SOCKADDR_IN;
72 typedef struct sockaddr SOCKADDR;
73 
74 typedef struct {
75  char header[4];
76  char data[100];
78 
91 int send_message_to_monitor(const char* typeMessage, const void * data = NULL);
92 
105 int receive_message_from_monitor(char *typeMessage, char *data);
106 
107 
108 #endif // _MONITOR_H_
int send_message_to_monitor(const char *typeMessage, const void *data=NULL)
Envoi d&#39;un message vers l&#39;interface graphique.
-
int SOCKET
Definition: monitor.h:70
-
struct sockaddr SOCKADDR
Definition: monitor.h:72
-
Functions for image treatment.
-
int receive_message_from_monitor(char *typeMessage, char *data)
Réception d&#39;un message. La fonction est bloquante et retourne par référence le type de message reçu (...
-
Various constants used in destjil project.
- -
struct sockaddr_in SOCKADDR_IN
Definition: monitor.h:71
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/nav_f.png b/software/raspberry/superviseur-robot/lib/doc/html/nav_f.png deleted file mode 100644 index 72a58a529ed3a9ed6aa0c51a79cf207e026deee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U diff --git a/software/raspberry/superviseur-robot/lib/doc/html/nav_g.png b/software/raspberry/superviseur-robot/lib/doc/html/nav_g.png deleted file mode 100644 index 2093a237a94f6c83e19ec6e5fd42f7ddabdafa81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL=0 ? varName.substring(i+1) : varName; - return eval(n.replace(/\-/g,'_')); -} - -function stripPath(uri) -{ - return uri.substring(uri.lastIndexOf('/')+1); -} - -function stripPath2(uri) -{ - var i = uri.lastIndexOf('/'); - var s = uri.substring(i+1); - var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); - return m ? uri.substring(i-6) : s; -} - -function hashValue() -{ - return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); -} - -function hashUrl() -{ - return '#'+hashValue(); -} - -function pathName() -{ - return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); -} - -function localStorageSupported() -{ - try { - return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; - } - catch(e) { - return false; - } -} - - -function storeLink(link) -{ - if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { - window.localStorage.setItem('navpath',link); - } -} - -function deleteLink() -{ - if (localStorageSupported()) { - window.localStorage.setItem('navpath',''); - } -} - -function cachedLink() -{ - if (localStorageSupported()) { - return window.localStorage.getItem('navpath'); - } else { - return ''; - } -} - -function getScript(scriptName,func,show) -{ - var head = document.getElementsByTagName("head")[0]; - var script = document.createElement('script'); - script.id = scriptName; - script.type = 'text/javascript'; - script.onload = func; - script.src = scriptName+'.js'; - if ($.browser.msie && $.browser.version<=8) { - // script.onload does not work with older versions of IE - script.onreadystatechange = function() { - if (script.readyState=='complete' || script.readyState=='loaded') { - func(); if (show) showRoot(); - } - } - } - head.appendChild(script); -} - -function createIndent(o,domNode,node,level) -{ - var level=-1; - var n = node; - while (n.parentNode) { level++; n=n.parentNode; } - if (node.childrenData) { - var imgNode = document.createElement("span"); - imgNode.className = 'arrow'; - imgNode.style.paddingLeft=(16*level).toString()+'px'; - imgNode.innerHTML=arrowRight; - node.plus_img = imgNode; - node.expandToggle = document.createElement("a"); - node.expandToggle.href = "javascript:void(0)"; - node.expandToggle.onclick = function() { - if (node.expanded) { - $(node.getChildrenUL()).slideUp("fast"); - node.plus_img.innerHTML=arrowRight; - node.expanded = false; - } else { - expandNode(o, node, false, false); - } - } - node.expandToggle.appendChild(imgNode); - domNode.appendChild(node.expandToggle); - } else { - var span = document.createElement("span"); - span.className = 'arrow'; - span.style.width = 16*(level+1)+'px'; - span.innerHTML = ' '; - domNode.appendChild(span); - } -} - -var animationInProgress = false; - -function gotoAnchor(anchor,aname,updateLocation) -{ - var pos, docContent = $('#doc-content'); - var ancParent = $(anchor.parent()); - if (ancParent.hasClass('memItemLeft') || - ancParent.hasClass('fieldname') || - ancParent.hasClass('fieldtype') || - ancParent.is(':header')) - { - pos = ancParent.position().top; - } else if (anchor.position()) { - pos = anchor.position().top; - } - if (pos) { - var dist = Math.abs(Math.min( - pos-docContent.offset().top, - docContent[0].scrollHeight- - docContent.height()-docContent.scrollTop())); - animationInProgress=true; - docContent.animate({ - scrollTop: pos + docContent.scrollTop() - docContent.offset().top - },Math.max(50,Math.min(500,dist)),function(){ - if (updateLocation) window.location.href=aname; - animationInProgress=false; - }); - } -} - -function newNode(o, po, text, link, childrenData, lastNode) -{ - var node = new Object(); - node.children = Array(); - node.childrenData = childrenData; - node.depth = po.depth + 1; - node.relpath = po.relpath; - node.isLast = lastNode; - - node.li = document.createElement("li"); - po.getChildrenUL().appendChild(node.li); - node.parentNode = po; - - node.itemDiv = document.createElement("div"); - node.itemDiv.className = "item"; - - node.labelSpan = document.createElement("span"); - node.labelSpan.className = "label"; - - createIndent(o,node.itemDiv,node,0); - node.itemDiv.appendChild(node.labelSpan); - node.li.appendChild(node.itemDiv); - - var a = document.createElement("a"); - node.labelSpan.appendChild(a); - node.label = document.createTextNode(text); - node.expanded = false; - a.appendChild(node.label); - if (link) { - var url; - if (link.substring(0,1)=='^') { - url = link.substring(1); - link = url; - } else { - url = node.relpath+link; - } - a.className = stripPath(link.replace('#',':')); - if (link.indexOf('#')!=-1) { - var aname = '#'+link.split('#')[1]; - var srcPage = stripPath(pathName()); - var targetPage = stripPath(link.split('#')[0]); - a.href = srcPage!=targetPage ? url : "javascript:void(0)"; - a.onclick = function(){ - storeLink(link); - if (!$(a).parent().parent().hasClass('selected')) - { - $('.item').removeClass('selected'); - $('.item').removeAttr('id'); - $(a).parent().parent().addClass('selected'); - $(a).parent().parent().attr('id','selected'); - } - var anchor = $(aname); - gotoAnchor(anchor,aname,true); - }; - } else { - a.href = url; - a.onclick = function() { storeLink(link); } - } - } else { - if (childrenData != null) - { - a.className = "nolink"; - a.href = "javascript:void(0)"; - a.onclick = node.expandToggle.onclick; - } - } - - node.childrenUL = null; - node.getChildrenUL = function() { - if (!node.childrenUL) { - node.childrenUL = document.createElement("ul"); - node.childrenUL.className = "children_ul"; - node.childrenUL.style.display = "none"; - node.li.appendChild(node.childrenUL); - } - return node.childrenUL; - }; - - return node; -} - -function showRoot() -{ - var headerHeight = $("#top").height(); - var footerHeight = $("#nav-path").height(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - (function (){ // retry until we can scroll to the selected item - try { - var navtree=$('#nav-tree'); - navtree.scrollTo('#selected',0,{offset:-windowHeight/2}); - } catch (err) { - setTimeout(arguments.callee, 0); - } - })(); -} - -function expandNode(o, node, imm, showRoot) -{ - if (node.childrenData && !node.expanded) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - expandNode(o, node, imm, showRoot); - }, showRoot); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } if (imm || ($.browser.msie && $.browser.version>8)) { - // somehow slideDown jumps to the start of tree for IE9 :-( - $(node.getChildrenUL()).show(); - } else { - $(node.getChildrenUL()).slideDown("fast"); - } - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - } - } -} - -function glowEffect(n,duration) -{ - n.addClass('glow').delay(duration).queue(function(next){ - $(this).removeClass('glow');next(); - }); -} - -function highlightAnchor() -{ - var aname = hashUrl(); - var anchor = $(aname); - if (anchor.parent().attr('class')=='memItemLeft'){ - var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); - glowEffect(rows.children(),300); // member without details - } else if (anchor.parent().attr('class')=='fieldname'){ - glowEffect(anchor.parent().parent(),1000); // enum value - } else if (anchor.parent().attr('class')=='fieldtype'){ - glowEffect(anchor.parent().parent(),1000); // struct field - } else if (anchor.parent().is(":header")) { - glowEffect(anchor.parent(),1000); // section header - } else { - glowEffect(anchor.next(),1000); // normal member - } - gotoAnchor(anchor,aname,false); -} - -function selectAndHighlight(hash,n) -{ - var a; - if (hash) { - var link=stripPath(pathName())+':'+hash.substring(1); - a=$('.item a[class$="'+link+'"]'); - } - if (a && a.length) { - a.parent().parent().addClass('selected'); - a.parent().parent().attr('id','selected'); - highlightAnchor(); - } else if (n) { - $(n.itemDiv).addClass('selected'); - $(n.itemDiv).attr('id','selected'); - } - if ($('#nav-tree-contents .item:first').hasClass('selected')) { - $('#nav-sync').css('top','30px'); - } else { - $('#nav-sync').css('top','5px'); - } - showRoot(); -} - -function showNode(o, node, index, hash) -{ - if (node && node.childrenData) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - showNode(o,node,index,hash); - },true); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).css({'display':'block'}); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - var n = node.children[o.breadcrumbs[index]]; - if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); - else hash=''; - } - if (hash.match(/^#l\d+$/)) { - var anchor=$('a[name='+hash.substring(1)+']'); - glowEffect(anchor.parent(),1000); // line number - hash=''; // strip line number anchors - } - var url=root+hash; - var i=-1; - while (NAVTREEINDEX[i+1]<=url) i++; - if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath) - } else { - getScript(relpath+'navtreeindex'+i,function(){ - navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath); - } - },true); - } -} - -function showSyncOff(n,relpath) -{ - n.html(''); -} - -function showSyncOn(n,relpath) -{ - n.html(''); -} - -function toggleSyncButton(relpath) -{ - var navSync = $('#nav-sync'); - if (navSync.hasClass('sync')) { - navSync.removeClass('sync'); - showSyncOff(navSync,relpath); - storeLink(stripPath2(pathName())+hashUrl()); - } else { - navSync.addClass('sync'); - showSyncOn(navSync,relpath); - deleteLink(); - } -} - -function initNavTree(toroot,relpath) -{ - var o = new Object(); - o.toroot = toroot; - o.node = new Object(); - o.node.li = document.getElementById("nav-tree-contents"); - o.node.childrenData = NAVTREE; - o.node.children = new Array(); - o.node.childrenUL = document.createElement("ul"); - o.node.getChildrenUL = function() { return o.node.childrenUL; }; - o.node.li.appendChild(o.node.childrenUL); - o.node.depth = 0; - o.node.relpath = relpath; - o.node.expanded = false; - o.node.isLast = true; - o.node.plus_img = document.createElement("span"); - o.node.plus_img.className = 'arrow'; - o.node.plus_img.innerHTML = arrowRight; - - if (localStorageSupported()) { - var navSync = $('#nav-sync'); - if (cachedLink()) { - showSyncOff(navSync,relpath); - navSync.removeClass('sync'); - } else { - showSyncOn(navSync,relpath); - } - navSync.click(function(){ toggleSyncButton(relpath); }); - } - - $(window).load(function(){ - navTo(o,toroot,hashUrl(),relpath); - showRoot(); - }); - - $(window).bind('hashchange', function(){ - if (window.location.hash && window.location.hash.length>1){ - var a; - if ($(location).attr('hash')){ - var clslink=stripPath(pathName())+':'+hashValue(); - a=$('.item a[class$="'+clslink.replace(/1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM=desktop_vp) { - if (!collapsed) { - collapseExpand(); - } - } else if (width>desktop_vp && collapsedWidth0) { - restoreWidth(0); - collapsed=true; - } - else { - var width = readCookie('width'); - if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } - collapsed=false; - } - } - - header = $("#top"); - sidenav = $("#side-nav"); - content = $("#doc-content"); - navtree = $("#nav-tree"); - footer = $("#nav-path"); - $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); - $(sidenav).resizable({ minWidth: 0 }); - $(window).resize(function() { resizeHeight(); }); - var device = navigator.userAgent.toLowerCase(); - var touch_device = device.match(/(iphone|ipod|ipad|android)/); - if (touch_device) { /* wider split bar for touch only devices */ - $(sidenav).css({ paddingRight:'20px' }); - $('.ui-resizable-e').css({ width:'20px' }); - $('#nav-sync').css({ right:'34px' }); - barWidth=20; - } - var width = readCookie('width'); - if (width) { restoreWidth(width); } else { resizeWidth(); } - resizeHeight(); - var url = location.href; - var i=url.indexOf("#"); - if (i>=0) window.location.hash=url.substr(i); - var _preventDefault = function(evt) { evt.preventDefault(); }; - $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); - $(".ui-resizable-handle").dblclick(collapseExpand); - $(window).load(resizeHeight); -} - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot-icon.resized.png b/software/raspberry/superviseur-robot/lib/doc/html/robot-icon.resized.png deleted file mode 100644 index e464bd08c84e5bf5a89aa386de5b109e95ede698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 913 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKptm- zM`SSrgFqDsGrs#W?I2K)y~NYkmHiQyJgXZg z`klg^$z}%y0tLg4=4{l{Wa?TbAk@?!w@rv!np@i1`#s*gj9+`Q+rN;mJ-sd%z&+oi{D%2iqCvjPJ`XvGF3+scY zFP<&FBmbUse~whH+aJOCmn5pCp4fcLkMRm=&M!J3c(<%`kMX04|7&hmyl#&%R@E0# z%0FdlpTDK%fVSfVDNBrP33oI2okYIiTE5!>90OP$;G(s@pCe6?Xbo5y8mnV-$N z|7zuY7IV|%++Svi#;n|Q=Y;6NHTS%#_D=N6GJdRI+c$l#srB0pj>fm<^vEZ8d~jIb zfA7b}6Y|FSR~+lP+qBxVR|#ZnW%srFeSA^L#QO9bEvmgYl6OCiV(Jz8anw+JZO5C> z%$F{m>zq@@(dqR)jBAbJOY`-*nOF5Xdm=ME*;OCsD_lz6^I~6=;kxC&m@^6v-ZuJu zt!vMAy(xJsmVBK&Wp8N9|MJs*k9Y0)vf9re^T3TN`8U@BOE>7tRXv+0s9DUq?(n3T;k=DJ0gF9%`)79F!$tOdDUnQOj^J?rWFxmRDdCLH>=^-#Wkwqx9(_iepWVmFg+&M7f`=DX|hrrlzxTX*TDmcISu zb=xCCkZY55Owpbn!X{E*mRtTj)M|cu?bPE7@2711`ds?Iuvf>N4;MD|+^))6UduY` z1M6SmDXo`)sZX`UHKHUXu_V9nO2Fe!N|(Q45Hx#TR0<7gCxj?;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7 V^x5xhq=1STJYD@<);T3K0RU%2e#-y= diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp.html b/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp.html deleted file mode 100644 index 16ff475..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - -Bibliotheques TP RT: src/robot.cpp File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
robot.cpp File Reference
-
-
-
#include "robot.h"
-
-Include dependency graph for robot.cpp:
-
-
- - - - -
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - -

-Functions

int getChar (char *c)
 
int readSerial (char *msg)
 
char checkSumGO (char *msg)
 
int receiveMsg (void)
 
int sendCmd (char cmd, const char *arg)
 
int open_communication_robot (const char *path)
 Ouvre la communication avec le robot. More...
 
int close_communication_robot (void)
 Ferme la communication avec le robot. More...
 
int send_command_to_robot (char cmd, const char *arg)
 Envoi une commande au robot et attends sa réponse. More...
 
- - - -

-Variables

int fd
 
-

Function Documentation

- -

◆ checkSumGO()

- -
-
- - - - - - - - -
char checkSumGO (char * msg)
-
- -

Definition at line 237 of file robot.cpp.

- -
-
- -

◆ close_communication_robot()

- -
-
- - - - - - - - -
int close_communication_robot (void )
-
- -

Ferme la communication avec le robot.

-

Ferme le descripteur de fichier du port serie contrôlant le robot.

-
Parameters
- - -
voidaucun
-
-
-
Returns
Retourne -1 en cas d'erreur ou 0 en cas de fermeture effectué
- -

Definition at line 64 of file robot.cpp.

- -
-
- -

◆ getChar()

- -
-
- - - - - - - - -
int getChar (char * c)
-
- -

Definition at line 199 of file robot.cpp.

- -
-
- -

◆ open_communication_robot()

- -
-
- - - - - - - - -
int open_communication_robot (const char * path = serialPort)
-
- -

Ouvre la communication avec le robot.

-

Ouvre le serial port passé en paramétre. Par defaut cette fonction ouvre le port ttySO connecté au module xbee.

-
Parameters
- - -
*pathchaine de caractère indiquant le path du port serie à ouvrir.
-
-
-
Returns
Return -1 si l'ouverture c'est mal passé et 0 si le port est ouvert.
- -

Definition at line 36 of file robot.cpp.

- -
-
- -

◆ readSerial()

- -
-
- - - - - - - - -
int readSerial (char * msg)
-
- -

Definition at line 216 of file robot.cpp.

- -
-
- -

◆ receiveMsg()

- -
-
- - - - - - - - -
int receiveMsg (void )
-
- -

Definition at line 168 of file robot.cpp.

- -
-
- -

◆ send_command_to_robot()

- -
-
- - - - - - - - - - - - - - - - - - -
int send_command_to_robot (char cmd,
const char * arg = NULL 
)
-
- -

Envoi une commande au robot et attends sa réponse.

-

Envoi une commande au robot en ajoutant le checksum et lis la réponse du robot en verifiant le checksum. Le premier paramétre cmd correspond au type de commande ex : PING, SETMOVE ... Le second paramétre *arg correspond aux arguments à la commande ex : SETMOVE, "100" La fonction retourne un code confirmation transmise par le robot (ROBOT_CHEKSUM, ROBOT_ERROR, ROBOT_TIMED_OUT, ROBOT_OK, ROBOT_UKNOW_CMD)

-
Parameters
- - - -
cmdEntête de la commande
*argArgument de la commande
-
-
-
Returns
retourne un code confirmation.
- -

Definition at line 74 of file robot.cpp.

- -
-
- -

◆ sendCmd()

- -
-
- - - - - - - - - - - - - - - - - - -
int sendCmd (char cmd,
const char * arg 
)
-
- -

Definition at line 138 of file robot.cpp.

- -
-
-

Variable Documentation

- -

◆ fd

- -
-
- - - - -
int fd
-
- -

Definition at line 28 of file robot.cpp.

- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp.js b/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp.js deleted file mode 100644 index 627339f..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp.js +++ /dev/null @@ -1,12 +0,0 @@ -var robot_8cpp = -[ - [ "checkSumGO", "robot_8cpp.html#ab87123df26d91967d4d7507ad10326ac", null ], - [ "close_communication_robot", "robot_8cpp.html#a3fbce7530a62f9287f8a3b85b9c7e4d7", null ], - [ "getChar", "robot_8cpp.html#a116eceb372bf4bda7e6a360286e762b1", null ], - [ "open_communication_robot", "robot_8cpp.html#a9360e75fe324da14faaa87105771140e", null ], - [ "readSerial", "robot_8cpp.html#a2e1339c58b604c970f67096c7d143c2a", null ], - [ "receiveMsg", "robot_8cpp.html#adf885bd17005f841896acf2e49350db7", null ], - [ "send_command_to_robot", "robot_8cpp.html#a68c01c5d6226d21fc0d141f681806677", null ], - [ "sendCmd", "robot_8cpp.html#ac9d64c6d05c20ae9fdb8c158e2ee7098", null ], - [ "fd", "robot_8cpp.html#a6f8059414f0228f0256115e024eeed4b", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.map deleted file mode 100644 index 26cd87c..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.md5 deleted file mode 100644 index 6738806..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6d74266766829eaadc434cde424d0c03 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/robot_8cpp__incl.png deleted file mode 100644 index febe531b54b3c930fb469cede8b5705fd79e5981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15044 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 - - - - - - -Bibliotheques TP RT: src/robot.cpp Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
robot.cpp
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
26 #include "robot.h"
27 
28 int fd;
29 
30 int getChar(char * c);
31 int readSerial(char * msg);
32 char checkSumGO(char * msg);
33 int receiveMsg(void);
34 int sendCmd(char cmd, const char * arg);
35 
36 int open_communication_robot(const char * path)
37 {
38 #ifndef __STUB__
39  struct termios options;
40  fd = open(path, O_RDWR | O_NOCTTY | O_NDELAY);
41  if(fd !=-1)
42  {
43  fcntl(fd, F_SETFL, 0);
44  tcgetattr(fd, &options);
45  options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
46  cfsetospeed (&options, B9600);
47  cfsetispeed (&options, B9600);
48  options.c_cc[VMIN]=0;
49  options.c_cc[VTIME]=0;
50  tcsetattr(fd, TCSANOW, &options);
51  return 0;
52  }
53  else
54  {
55  perror("can't openSerial");
56  return -1;
57  }
58 #else
59  return 0;
60 #endif
61 }
62 
63 
65 {
66 #ifndef __STUB__
67  return close(fd);
68 #else
69  return 0;
70 #endif
71 }
72 
73 
74 int send_command_to_robot(char cmd, const char * arg)
75 {
76 #ifndef __STUB__
77  sendCmd(cmd,arg);
78  // TODO : check return from sendCmd
79  return receiveMsg();
80 #else
81  int reponse;
82  switch(cmd)
83  {
84  case DMB_PING:
85  reponse = 0;
86  break;
87  case DMB_IDLE:
88  reponse = 0;
89  break;
90  case DMB_START_WITH_WD:
91  reponse = 0;
92  break;
93  case DMB_RELOAD_WD:
94  reponse = 0;
95  break;
96  case DMB_GET_VBAT:
97  reponse = 2;
98  break;
99  case DMB_IS_BUSY:
100  reponse = 1;
101  break;
103  reponse = 0;
104  break;
105  case DMB_MOVE:
106  reponse = 0;
107  break;
108  case DMB_TURN:
109  reponse = 0;
110  break;
111  case DMB_GO_FORWARD:
112  reponse = 0;
113  break;
114  case DMB_GO_BACK:
115  reponse = 0;
116  break;
117  case DMB_GO_LEFT:
118  reponse = 0;
119  break;
120  case DMB_GO_RIGHT:
121  reponse = 0;
122  break;
123  case DMB_STOP_MOVE:
124  reponse = 0;
125  break;
126  default:
127  reponse = 0;
128  break;
129  }
130  return reponse;
131 #endif
132 }
133 
134 /****************************/
135 /* PRIVATE */
136 /****************************/
137 
138 int sendCmd(char cmd, const char * arg)
139 {
140  char cmdWithArg[20]={};
141  cmdWithArg[0]=cmd;
142  switch(cmd)
143  {
144  case DMB_GO_FORWARD: strcpy(cmdWithArg,"M=+64000");
145  break;
146  case DMB_GO_BACK: strcpy(cmdWithArg,"M=-64000");
147  break;
148  case DMB_GO_LEFT: strcpy(cmdWithArg,"T=+64000");
149  break;
150  case DMB_GO_RIGHT: strcpy(cmdWithArg,"T=-64000");
151  break;
152  case DMB_STOP_MOVE: strcpy(cmdWithArg,"M=0");
153  break;
154  case DMB_MOVE: strcat(cmdWithArg,"=");
155  strcat(cmdWithArg,arg);
156  break;
157  case DMB_TURN: strcat(cmdWithArg,"=");
158  strcat(cmdWithArg,arg);
159  break;
160  }
161  int sizeCmd = strlen(cmdWithArg);
162  cmdWithArg[sizeCmd] = checkSumGO(cmdWithArg);
163  cmdWithArg[sizeCmd+1] = '\r';
164  cmdWithArg[sizeCmd+2] = '\0';
165  return write(fd,cmdWithArg,strlen(cmdWithArg));
166 }
167 
168 int receiveMsg(void)
169 {
170  char msg[20];
171  int b;
172  if((b = readSerial(msg))!=ROBOT_TIMED_OUT)
173  {
174  int taille = strlen(msg);
175  char checksum = msg[taille-2];
176  msg[taille-1] = 0;
177  msg[taille-2] = 0;
178  if(checksum!=checkSumGO(msg))
179  {
180  return ROBOT_CHECKSUM;
181  }
182  else
183  {
184  switch(msg[0])
185  {
186  case 'O' : return 0;
187  case 'E' : return ROBOT_ERROR;
188  case 'C' : return ROBOT_UKNOWN_CMD;
189  default : return atoi(&msg[0]);
190  }
191  }
192  }
193  else
194  {
195  return ROBOT_TIMED_OUT;
196  }
197 }
198 
199 int getChar(char * c)
200 {
201  int n =0;
202  int delay =0;
203  while((n=read(fd,c,1)) <=0)
204  {
205  usleep(5000);
206  delay++;
207  if(delay > 10)
208  {
209  return ROBOT_TIMED_OUT;
210  }
211 
212  }
213  return n;
214 }
215 
216 int readSerial(char * msg)
217 {
218  char car=0;
219  int i=0;
220  for(int j = 0 ; j < 20 ; j++)
221  msg[j]=0;
222 
223  while(car !='\r' && car!='\n') {
224  if(i>=20)
225  return -5;
226 
227  if(getChar(&car)==ROBOT_TIMED_OUT) {
228  return ROBOT_TIMED_OUT;
229  }
230 
231  msg[i] = car;
232  i++;
233  }
234  return i;
235 }
236 
237 char checkSumGO(char * msg)
238 {
239  char resultat = 0;
240  int i = 0;
241  int taille = strlen(msg);
242  for(i=0;i<taille;i++)
243  {
244  resultat^=msg[i];
245  }
246  return resultat;
247 
248 }
249 
250 
251 
#define DMB_PING
Definition: definitions.h:33
-
#define DMB_RELOAD_WD
Definition: definitions.h:37
-
#define DMB_GO_LEFT
Definition: definitions.h:44
-
#define DMB_START_WITH_WD
Definition: definitions.h:36
-
#define DMB_GO_BACK
Definition: definitions.h:43
-
Fonctions for communicating with robot.
-
char checkSumGO(char *msg)
Definition: robot.cpp:237
-
int readSerial(char *msg)
Definition: robot.cpp:216
-
#define ROBOT_ERROR
Definition: definitions.h:50
-
#define ROBOT_CHECKSUM
Definition: definitions.h:51
-
#define DMB_START_WITHOUT_WD
Definition: definitions.h:35
-
int receiveMsg(void)
Definition: robot.cpp:168
-
int getChar(char *c)
Definition: robot.cpp:199
-
#define ROBOT_UKNOWN_CMD
Definition: definitions.h:49
-
#define DMB_IDLE
Definition: definitions.h:34
-
#define DMB_GO_RIGHT
Definition: definitions.h:45
-
int sendCmd(char cmd, const char *arg)
Definition: robot.cpp:138
-
#define DMB_IS_BUSY
Definition: definitions.h:39
-
#define DMB_GET_VBAT
Definition: definitions.h:38
-
#define ROBOT_TIMED_OUT
Definition: definitions.h:48
-
#define DMB_GO_FORWARD
Definition: definitions.h:42
-
int send_command_to_robot(char cmd, const char *arg)
Envoi une commande au robot et attends sa réponse.
Definition: robot.cpp:74
-
int fd
Definition: robot.cpp:28
-
int open_communication_robot(const char *path)
Ouvre la communication avec le robot.
Definition: robot.cpp:36
-
#define DMB_STOP_MOVE
Definition: definitions.h:46
-
int close_communication_robot(void)
Ferme la communication avec le robot.
Definition: robot.cpp:64
-
#define DMB_TURN
Definition: definitions.h:41
-
#define DMB_MOVE
Definition: definitions.h:40
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h.html b/software/raspberry/superviseur-robot/lib/doc/html/robot_8h.html deleted file mode 100644 index 258c699..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - -Bibliotheques TP RT: robot.h File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
robot.h File Reference
-
-
- -

Fonctions for communicating with robot. -More...

-
#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <termios.h>
-#include <string.h>
-#include <stdlib.h>
-#include "definitions.h"
-
-Include dependency graph for robot.h:
-
-
- - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  MessageToRobot
 
- - - -

-Macros

#define serialPort   "/dev/ttyS0"
 
- - - - - - - - - - -

-Functions

int open_communication_robot (const char *path=serialPort)
 Ouvre la communication avec le robot. More...
 
int close_communication_robot (void)
 Ferme la communication avec le robot. More...
 
int send_command_to_robot (char cmd, const char *arg=NULL)
 Envoi une commande au robot et attends sa réponse. More...
 
-

Detailed Description

-

Fonctions for communicating with robot.

-
Author
L.Senaneuch
-
Version
1.0
-
Date
06/06/2017
- -

Definition in file robot.h.

-

Macro Definition Documentation

- -

◆ serialPort

- -
-
- - - - -
#define serialPort   "/dev/ttyS0"
-
- -

Definition at line 40 of file robot.h.

- -
-
-

Function Documentation

- -

◆ close_communication_robot()

- -
-
- - - - - - - - -
int close_communication_robot (void )
-
- -

Ferme la communication avec le robot.

-

Ferme le descripteur de fichier du port serie contrôlant le robot.

-
Returns
Retourne -1 en cas d'erreur ou 0 en cas de fermeture effectué
- -
-
- -

◆ open_communication_robot()

- -
-
- - - - - - - - -
int open_communication_robot (const char * path = serialPort)
-
- -

Ouvre la communication avec le robot.

-

Ouvre le serial port passé en paramétre. Par defaut cette fonction ouvre le port ttySO connecté au module xbee.

-
Parameters
- - -
pathChaine de caractère contenant le path du port serie à ouvrir.
-
-
-
Returns
Return -1 si l'ouverture c'est mal passé et 0 si le port est ouvert.
- -
-
- -

◆ send_command_to_robot()

- -
-
- - - - - - - - - - - - - - - - - - -
int send_command_to_robot (char cmd,
const char * arg = NULL 
)
-
- -

Envoi une commande au robot et attends sa réponse.

-

Envoi une commande au robot en ajoutant le checksum et lis la réponse du robot en verifiant le checksum. Le premier paramétre cmd correspond au type de commande ex : PING, SETMOVE ... Le second paramétre *arg correspond aux arguments à la commande ex : SETMOVE, "100" La fonction retourne un code confirmation transmise par le robot (ROBOT_CHEKSUM, ROBOT_ERROR, ROBOT_TIMED_OUT, ROBOT_OK, ROBOT_UKNOW_CMD)

-
Parameters
- - - -
cmdEntête de la commande
argArgument de la commande
-
-
-
Returns
Retourne un code confirmation.
- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h.js b/software/raspberry/superviseur-robot/lib/doc/html/robot_8h.js deleted file mode 100644 index 9c39a86..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h.js +++ /dev/null @@ -1,8 +0,0 @@ -var robot_8h = -[ - [ "MessageToRobot", "struct_message_to_robot.html", "struct_message_to_robot" ], - [ "serialPort", "robot_8h.html#a32c8768c18732c59b503f8ee7515a693", null ], - [ "close_communication_robot", "robot_8h.html#a3fbce7530a62f9287f8a3b85b9c7e4d7", null ], - [ "open_communication_robot", "robot_8h.html#a0e70fa821a04d349552b8bd54f6935db", null ], - [ "send_command_to_robot", "robot_8h.html#abe88fd581be321a9d86ae7063abd2f65", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.map deleted file mode 100644 index 5726183..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.md5 deleted file mode 100644 index bfa5d8b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9dee0b0a6e7c8cd2ba54606b5bd229ef \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__dep__incl.png deleted file mode 100644 index a9d0df261723442a646360f88f220fc09f9bd33c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2333 zcmb_dcT|&07XRo$rI&}HD&km4i+?}za zo~DR|PIZrOB&5s*RG|#=UU%dtNW70*DARGg7knC5f6jRrfo0uH$tVTm{&r%1TSWudD>Ej?D%u z9iEnuK%lvz%;K-eUA9fIvTjHw{aZn#L1Cw@zOryaQ>Utdg>iEnP!xgX@lZ7DVTU}AJMXlbb6_&B1f|Br_pG9654(%BWidnE}(YcBZa~N6c-m;ua`GAUQ$s}QBtZXEq$455;JrdBAnQx zqoczbHM6@mK_Czo78c~?<)@~m_@oVAaI2}Q-K=qL3s~q|8LiovYW+)_s)`C5psA^8 zyh zx~2>+4h{^wU*i$iO2J9PBkEI|#Udgiz!Hh6gEA&Sc?$(0pf-XLqJX{n&KRXAe0+TD zcf>f_n@1WMMJ9jj$)A?#=H7;3$w`TcDr#zY91fS2RbE+{gu%q|rKhJW2`9|X&b9_^ zD9Fi;_2%T|#fgL7ySxi4U@EHm4IJf0N3+7=?O?3mzklyD@wTL_tScCe9>!_h2V?My zq@>W7veeEm^M)&82=vOOaq<(O4FxE)YZ}3ySf=!3}is`#7 zfWvJrO(>oaS{HjQ^e1C4)+ORJ04)9ZkoP=8r&aQHQ#~moqY+ue4RpAwL!lu#Q~ywN z94|r)v%xcAIE(gU-9j`q2=7|bRBe`SPW!CG>4E{9RE$FL&H0>S={S1F#^yZ0Y`tQ{ zj|dNM6gsL)UJ0qJ*-(IN^*}5X3LE$GY;2_QW3PA|Kh4e0$2Iyg?_Ojm^?HQ-+@Zm9 zK2Zgm%FQb3Gs*R<6jya~xpN_2t>vV{L#d+FuXDf6&f-#2PahuL61=&ity!GX&$N8T zpwO@fOQ|Zkva3PY94BQN_*x2t*tlhHVj@$oU44(nPB2=9$Y zALz(*#C@-@V(a{|LVrm*3N6BZlvq74dJLJ@4c@tpsY8L(UbPYeOK zWBISP3}nkxa40jq=P;4bTHF0~VndiIz5ZIuDIxokuLD9+zqF);I-Dear%ehfB~AU0 zc?Sb4OG`<;KyR{Uv*UW@-A8LL?J(#H;k8%C8(-Q?2+*{yq3?AK4X`t3Slo=U+v9a`#k!bip_wMelWww^V^J7Oj!Ppls{F)~#D^<6gA<~9n z_KlAuvng8FBM!C}CMO*O1GVD1xOsWcDJw@evH^g8@SjF9{NM$U*Q85$de6e*6db8`ZLk#O$T3X(|&5(g?dn6;Vsi}3KI80Y}oKA1J+n=$$I4HzkXJ7ghJ6hw?xXz-m@tJV{$&-2lK|^03 zbQHyz=@_d5w#(Oz_adP=+1YmppG!(g9I8aUz)G(b$5|lx5eUSK8_Ka{6BCo<)|-&X}5-^S8JZRMO33 zI{8I+rx$kESy`Hk!-IphaXJPDKC(1upOk9fqp22ph|9N5kvezG$&)9yx3^(1n0d+8 z619k%n|mJ8>s|+DN6OdTofY|o`0Vk))?J`uj)V~s5~8eh%tuB7qKPm=L*AHx=A6OB zt~DwZ)pX(FML|J9_kUTa?0*&XDF0M7B=j3@e}8{`+@SGJ3Ed| zerGf^Xh?-;E||VP^WYlcJ}DUv4i1l70g~Z;GkxlCa;Ao%AiF>Fm@zao1baAwKq9qZ zuv8Piup4DG5fPEigD@AD>8?1wH*~Ky=XT#|!>wh}nAZ+fh5_^O?d@<3Nkvul)AAE_ z$`}|Ym z7YxVesFnpeX` - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__incl.md5 deleted file mode 100644 index fc67b70..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ae0d08dc648656936c7f6ca3272fd6a3 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/robot_8h__incl.png deleted file mode 100644 index 28bfa1c250a231b08d068d9e2dac640fe94d4b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11536 zcmZvC1yq$?6y-zd5CQ2%N>W<7r9)Cdy1Tnn5TvBLqz5-JeLGk@^AJ@PZ~b0=Z zdW~YKdY8$0t$n*)jbgfl>ap2*EoKHs6hz#0HN_9`�*3r761a9tik5;KjPQaJ-u` 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 - - - - - - -Bibliotheques TP RT: robot.h Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
robot.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
26 #ifndef _ROBOT_H_
27 #define _ROBOT_H_
28 
29 #include <stdio.h>
30 #include <unistd.h>
31 #include <fcntl.h>
32 #include <termios.h>
33 #include <string.h>
34 #include <stdlib.h>
35 #include "definitions.h"
36 
37 #ifdef __FOR_PC__
38 #define serialPort "/dev/ttyUSB0"
39 #else
40 #define serialPort "/dev/ttyS0"
41 #endif /* __FOR_PC__ */
42 
43 typedef struct
44  {
45  char header[4];
46  char data[20];
48 
56 int open_communication_robot(const char * path=serialPort);
57 
65 
77 int send_command_to_robot(char cmd, const char * arg=NULL);
78 
79 #endif //_ROBOT_H_
int close_communication_robot(void)
Ferme la communication avec le robot.
-
#define serialPort
Definition: robot.h:40
- -
Various constants used in destjil project.
-
int open_communication_robot(const char *path=serialPort)
Ouvre la communication avec le robot.
-
int send_command_to_robot(char cmd, const char *arg=NULL)
Envoi une commande au robot et attends sa réponse.
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_0.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_0.html deleted file mode 100644 index f25360b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_0.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_0.js deleted file mode 100644 index f3a2382..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['acceptclient',['acceptClient',['../server_8h.html#abff9f8e931ecce919588b371dc511857',1,'server.h']]], - ['angle',['angle',['../struct_position.html#a733540df6c0f832676dc0846b34bb1e2',1,'Position']]], - ['arene',['Arene',['../image_8h.html#aa856a7cb8a1535c9f13096bede6c8586',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_1.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_1.html deleted file mode 100644 index b13f0f7..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_1.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_1.js deleted file mode 100644 index bc0e698..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_1.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['cam_5farena_5fconfirm',['CAM_ARENA_CONFIRM',['../definitions_8h.html#a15d9063cd3c60755685ceb75df4a7354',1,'definitions.h']]], - ['cam_5farena_5finfirm',['CAM_ARENA_INFIRM',['../definitions_8h.html#ac836c6abc7e32d2cf7f59ed2a8383ca7',1,'definitions.h']]], - ['cam_5fask_5farena',['CAM_ASK_ARENA',['../definitions_8h.html#a6418778d1f34e618aebd9ca1861ab500',1,'definitions.h']]], - ['cam_5fclose',['CAM_CLOSE',['../definitions_8h.html#a675009273c3923e8ad1a6d2818063b61',1,'definitions.h']]], - ['cam_5fcompute_5fposition',['CAM_COMPUTE_POSITION',['../definitions_8h.html#a74fdb9d00556feb699d3c72bd7b5d5e5',1,'definitions.h']]], - ['cam_5fopen',['CAM_OPEN',['../definitions_8h.html#a2a7149bbe097fae8e799ce2ab6f69390',1,'definitions.h']]], - ['cam_5fstop_5fcompute_5fposition',['CAM_STOP_COMPUTE_POSITION',['../definitions_8h.html#ae864cfaefbf5a210e67678b2144a289f',1,'definitions.h']]], - ['camera',['Camera',['../image_8h.html#a739dda3f6f6ddbab22617837b43a692a',1,'image.h']]], - ['center',['center',['../struct_position.html#aa56444be37071311cfa11aae3e2c2f64',1,'Position']]], - ['check_5farena',['CHECK_ARENA',['../monitor_8h.html#a22d20ac264e03c59d6941cb11386aa89',1,'monitor.h']]], - ['close_5fcamera',['close_camera',['../image_8h.html#a19eac11a04cb4b86fd32e6a36445ad5d',1,'image.h']]], - ['close_5fcom_5fdmb',['CLOSE_COM_DMB',['../definitions_8h.html#a1b18773c1ce9068c4d38c2cbd2900263',1,'definitions.h']]], - ['close_5fcommunication_5frobot',['close_communication_robot',['../robot_8h.html#a3fbce7530a62f9287f8a3b85b9c7e4d7',1,'robot.h']]], - ['closeserver',['closeServer',['../server_8h.html#ab65b2df50051036defe0f35366f5a3d6',1,'server.h']]], - ['closesocket',['closesocket',['../monitor_8h.html#ab6b45251e218af8f09c5d627b5262398',1,'monitor.h']]], - ['compress_5fimage',['compress_image',['../image_8h.html#a909ca7577f0ac2e4bd0ea21291690dce',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_2.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_2.html deleted file mode 100644 index 9543c57..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_2.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_2.js deleted file mode 100644 index 6d49e77..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_2.js +++ /dev/null @@ -1,34 +0,0 @@ -var searchData= -[ - ['data',['data',['../struct_message_to_mon.html#a4e5977ba9fb3fa07d435155731944d15',1,'MessageToMon::data()'],['../struct_message_from_mon.html#a1aea445500b0fa020a1b08eaff791107',1,'MessageFromMon::data()'],['../struct_message_to_robot.html#abf7dafbba72784855abd50469ba82705',1,'MessageToRobot::data()']]], - ['default_5finterface_5ffile',['DEFAULT_INTERFACE_FILE',['../monitor_8h.html#af533d8bd7d6a1d9f9efba3b259280e32',1,'monitor.h']]], - ['default_5fnodejs_5fpath',['DEFAULT_NODEJS_PATH',['../monitor_8h.html#a2c47b710f0858fe41c544517c6b2a2fd',1,'monitor.h']]], - ['default_5fparity',['DEFAULT_PARITY',['../monitor_8h.html#a939612a13947b5bb9fc848e3222a231d',1,'monitor.h']]], - ['default_5fport',['DEFAULT_PORT',['../monitor_8h.html#a16b710f592bf8f7900666392adc444dc',1,'monitor.h']]], - ['default_5fserver_5fport',['DEFAULT_SERVER_PORT',['../server_8h.html#af257e2a3e091629829857a2eb8931a7a',1,'server.h']]], - ['definitions_2eh',['definitions.h',['../definitions_8h.html',1,'']]], - ['detect_5farena',['detect_arena',['../image_8h.html#acad45df4061a55f17be0db97c1406249',1,'detect_arena(Image *monImage, Arene *rectangle): image.h'],['../monitor_8h.html#ab3be9ae187e8b98bb000ca0bca68e982',1,'DETECT_ARENA(): monitor.h']]], - ['detect_5fposition',['detect_position',['../image_8h.html#af9f6e2dd4409486f2f6446d1a8a02c40',1,'image.h']]], - ['direction',['direction',['../struct_position.html#a780d124971951424c0c63f6d81bb4d92',1,'Position']]], - ['dmb_5fbat_5fhigh',['DMB_BAT_HIGH',['../definitions_8h.html#ab34c46794a9de6746a96752668c73754',1,'definitions.h']]], - ['dmb_5fbat_5flow',['DMB_BAT_LOW',['../definitions_8h.html#a66c0c4960c1e81c8da8c8e1d4a202352',1,'definitions.h']]], - ['dmb_5fbat_5fmedium',['DMB_BAT_MEDIUM',['../definitions_8h.html#aea6ef1c13db1a8a4a29b065d0c3f73e4',1,'definitions.h']]], - ['dmb_5fbusy',['DMB_BUSY',['../definitions_8h.html#a3327443cd321f0c356a5d3d74377892b',1,'definitions.h']]], - ['dmb_5fdo_5fnothing',['DMB_DO_NOTHING',['../definitions_8h.html#a07650c5f6647c5143bac535fdbeb77d5',1,'definitions.h']]], - ['dmb_5fget_5fvbat',['DMB_GET_VBAT',['../definitions_8h.html#af1737e8fe4da4e8bc2d5db9d26c42462',1,'definitions.h']]], - ['dmb_5fgo_5fback',['DMB_GO_BACK',['../definitions_8h.html#a499f41cc19a4459de033687049cbbe71',1,'definitions.h']]], - ['dmb_5fgo_5fforward',['DMB_GO_FORWARD',['../definitions_8h.html#ae363a29a4961cd8a646a0ca9199bc6cf',1,'definitions.h']]], - ['dmb_5fgo_5fleft',['DMB_GO_LEFT',['../definitions_8h.html#aefcb838e73a335f1a2a6c914ee2ff752',1,'definitions.h']]], - ['dmb_5fgo_5fright',['DMB_GO_RIGHT',['../definitions_8h.html#ad681962f7b8cf4797ebd48be0405d1b9',1,'definitions.h']]], - ['dmb_5fidle',['DMB_IDLE',['../definitions_8h.html#a82b279c49221d3cd3d875d521dfb97b9',1,'definitions.h']]], - ['dmb_5fis_5fbusy',['DMB_IS_BUSY',['../definitions_8h.html#ad58c241121e685f26a291aa4bd5f9c80',1,'definitions.h']]], - ['dmb_5fmove',['DMB_MOVE',['../definitions_8h.html#ac48dee90eb71d036d001321674abbb8b',1,'definitions.h']]], - ['dmb_5fping',['DMB_PING',['../definitions_8h.html#acf7d51360dcb103fc57604725ec2816d',1,'definitions.h']]], - ['dmb_5freload_5fwd',['DMB_RELOAD_WD',['../definitions_8h.html#a2ca219902014ffb39aab27cca08a948f',1,'definitions.h']]], - ['dmb_5fstart_5fwith_5fwd',['DMB_START_WITH_WD',['../definitions_8h.html#adee1628bbc796ba55f4a349895f4e0fa',1,'definitions.h']]], - ['dmb_5fstart_5fwithout_5fwd',['DMB_START_WITHOUT_WD',['../definitions_8h.html#a5ebbd37042a6244b4f9d473ae7132780',1,'definitions.h']]], - ['dmb_5fstop_5fmove',['DMB_STOP_MOVE',['../definitions_8h.html#a7308179907a0a2989c162865e7a7979a',1,'definitions.h']]], - ['dmb_5fturn',['DMB_TURN',['../definitions_8h.html#ac6c5492c8100e73f8d30ed36072684db',1,'definitions.h']]], - ['draw_5farena',['draw_arena',['../image_8h.html#a5ffd032a466af45a505fb46252194bbf',1,'image.h']]], - ['draw_5fposition',['draw_position',['../image_8h.html#a869c3946d4a414b8730ca4f91fbd9556',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_3.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_3.html deleted file mode 100644 index 03405c0..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_3.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_3.js deleted file mode 100644 index 8d4acc0..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['free_5fmsgtomon_5fdata',['free_msgToMon_data',['../message_8h.html#a285193a5a9d3b142f3f1c53c471d3173',1,'message.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_4.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_4.html deleted file mode 100644 index 8e1f4b9..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_4.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_4.js deleted file mode 100644 index 55d5041..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['get_5fimage',['get_image',['../image_8h.html#ad904f3348c2d44f9c82435c94cd83844',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_5.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_5.html deleted file mode 100644 index 89a879e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_5.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_5.js deleted file mode 100644 index 51ee71d..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_5.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['header',['header',['../struct_message_to_mon.html#acb1096bef5e5c300f3d795556fda852a',1,'MessageToMon::header()'],['../struct_message_from_mon.html#ad46f6e6dd24be5cb2bc5eae5b3cdd095',1,'MessageFromMon::header()'],['../struct_message_to_robot.html#ab00202c6cfdd86ea4cd891c972405db6',1,'MessageToRobot::header()']]], - ['header_5fmts_5fcamera',['HEADER_MTS_CAMERA',['../monitor_8h.html#a91e2658cf20010646211ba748885c180',1,'monitor.h']]], - ['header_5fmts_5fcom_5fdmb',['HEADER_MTS_COM_DMB',['../monitor_8h.html#a0c829d92889c5c9b2d485964ce933fab',1,'monitor.h']]], - ['header_5fmts_5fdmb_5forder',['HEADER_MTS_DMB_ORDER',['../monitor_8h.html#a5ccd30e6502bb94eaa13a597edb1f156',1,'monitor.h']]], - ['header_5fmts_5fmsg',['HEADER_MTS_MSG',['../monitor_8h.html#a980e8f9457e30018fddcd4d997f17a85',1,'monitor.h']]], - ['header_5fmts_5fstop',['HEADER_MTS_STOP',['../monitor_8h.html#a2be30c9a3e65eaf5502b8542a6ac6259',1,'monitor.h']]], - ['header_5fstm_5fack',['HEADER_STM_ACK',['../monitor_8h.html#af2325d19ae9da4310eb608c744149f53',1,'monitor.h']]], - ['header_5fstm_5fbat',['HEADER_STM_BAT',['../monitor_8h.html#a0de226ae5af8b83f3b163ff4413eef95',1,'monitor.h']]], - ['header_5fstm_5fimage',['HEADER_STM_IMAGE',['../monitor_8h.html#ad62b697bd25a71d171db46740aef2830',1,'monitor.h']]], - ['header_5fstm_5flost_5fdmb',['HEADER_STM_LOST_DMB',['../monitor_8h.html#afe29ce74d16751828da8aec7e13ad06b',1,'monitor.h']]], - ['header_5fstm_5fmes',['HEADER_STM_MES',['../monitor_8h.html#ac1034bccb09918cccd3ba142377a6788',1,'monitor.h']]], - ['header_5fstm_5fno_5fack',['HEADER_STM_NO_ACK',['../monitor_8h.html#ac2e64478522da4e3b45c139c0c72557f',1,'monitor.h']]], - ['header_5fstm_5fpos',['HEADER_STM_POS',['../monitor_8h.html#a6a07aae2539981459edc8070a0f019db',1,'monitor.h']]], - ['height',['HEIGHT',['../image_8h.html#aed89bd71aee8be823e8a20ec4e093c1e',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_6.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_6.html deleted file mode 100644 index 6afac06..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_6.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_6.js deleted file mode 100644 index e32b970..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_6.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['image',['Image',['../image_8h.html#a466446fef9c0348568bc6743186d1a38',1,'image.h']]], - ['image_2eh',['image.h',['../image_8h.html',1,'']]], - ['invalid_5fsocket',['INVALID_SOCKET',['../monitor_8h.html#a26769957ec1a2beaf223f33b66ee64ab',1,'monitor.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_7.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_7.html deleted file mode 100644 index de19107..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_7.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_7.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_7.js deleted file mode 100644 index 2199e13..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['jpg',['Jpg',['../image_8h.html#a9ac2855e21920c676a108df386ff9415',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_8.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_8.html deleted file mode 100644 index 11e27cd..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_8.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_8.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_8.js deleted file mode 100644 index 89bc51f..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_8.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['message_2eh',['message.h',['../message_8h.html',1,'']]], - ['messagefrommon',['MessageFromMon',['../struct_message_from_mon.html',1,'']]], - ['messagetomon',['MessageToMon',['../struct_message_to_mon.html',1,'']]], - ['messagetorobot',['MessageToRobot',['../struct_message_to_robot.html',1,'']]], - ['monitor_2eh',['monitor.h',['../monitor_8h.html',1,'']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_9.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_9.html deleted file mode 100644 index f8abbbe..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_9.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_9.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_9.js deleted file mode 100644 index 052c117..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['no_5farena',['NO_ARENA',['../monitor_8h.html#a1d58e03abc2a587c7f0a0665c94c0e68',1,'monitor.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_a.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_a.html deleted file mode 100644 index 9601fce..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_a.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_a.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_a.js deleted file mode 100644 index dea0584..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_a.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['open_5fcamera',['open_camera',['../image_8h.html#aca0662ab31eac7fdb2d64fecc52ff1da',1,'image.h']]], - ['open_5fcom_5fdmb',['OPEN_COM_DMB',['../definitions_8h.html#aac798eaf6994ddcadd8a38ad8aba234f',1,'definitions.h']]], - ['open_5fcommunication_5frobot',['open_communication_robot',['../robot_8h.html#a0e70fa821a04d349552b8bd54f6935db',1,'robot.h']]], - ['openserver',['openServer',['../server_8h.html#a99b54d5b3404766f906f49605a4aa0e3',1,'server.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_b.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_b.html deleted file mode 100644 index 0814e4e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_b.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_b.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_b.js deleted file mode 100644 index 3648385..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_b.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['position',['Position',['../struct_position.html',1,'']]], - ['print_5fmsgtomon',['print_msgToMon',['../message_8h.html#ae409e822d69cee7483a2d41c62698a85',1,'message.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_c.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_c.html deleted file mode 100644 index da08c38..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_c.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_c.js deleted file mode 100644 index 4ce452a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_c.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['receive_5fmessage_5ffrom_5fmonitor',['receive_message_from_monitor',['../monitor_8h.html#a61eca0d5b49118350db39583e1bd1032',1,'monitor.h']]], - ['receivedatafromserver',['receiveDataFromServer',['../server_8h.html#a8b66a2007f3f9ed8538428a309c9d368',1,'server.h']]], - ['receivedatafromserverfromclient',['receiveDataFromServerFromClient',['../server_8h.html#a247e0124af257d0cc7abc25a7c448d1b',1,'server.h']]], - ['robot_2eh',['robot.h',['../robot_8h.html',1,'']]], - ['robot_5fchecksum',['ROBOT_CHECKSUM',['../definitions_8h.html#af1118b8a83d446b4965347bba126a488',1,'definitions.h']]], - ['robot_5ferror',['ROBOT_ERROR',['../definitions_8h.html#a4aefbbdd5d35999aa0575ab7183148d4',1,'definitions.h']]], - ['robot_5fok',['ROBOT_OK',['../definitions_8h.html#ad7b2f95c0b423fb9784acb897b910c36',1,'definitions.h']]], - ['robot_5ftimed_5fout',['ROBOT_TIMED_OUT',['../definitions_8h.html#a624686d3af63394ee02f0a197967d44a',1,'definitions.h']]], - ['robot_5fuknown_5fcmd',['ROBOT_UKNOWN_CMD',['../definitions_8h.html#a70a2d5db14b900843364adb7cfe53ac8',1,'definitions.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_d.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_d.html deleted file mode 100644 index 9986c9c..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_d.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_d.js deleted file mode 100644 index 6238e8a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_d.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['send_5fcommand_5fto_5frobot',['send_command_to_robot',['../robot_8h.html#abe88fd581be321a9d86ae7063abd2f65',1,'robot.h']]], - ['send_5fmessage_5fto_5fmonitor',['send_message_to_monitor',['../monitor_8h.html#ac3d876b96642b6ee46f6a96b7ffcb864',1,'monitor.h']]], - ['senddatatoserver',['sendDataToServer',['../server_8h.html#a8d865d29914b980fd71ed8d347e4ec50',1,'server.h']]], - ['senddatatoserverforclient',['sendDataToServerForClient',['../server_8h.html#a4c2df7961aa7379ac79d80980a1c537b',1,'server.h']]], - ['sendimage',['sendImage',['../server_8h.html#a51b9372f5467705aa81d76ae034c7628',1,'server.h']]], - ['serialport',['serialPort',['../robot_8h.html#a32c8768c18732c59b503f8ee7515a693',1,'robot.h']]], - ['server_2eh',['server.h',['../server_8h.html',1,'']]], - ['set_5fmsgtomon_5fdata',['set_msgToMon_data',['../message_8h.html#aa938f8156bfca7379f533b751334ca6f',1,'message.h']]], - ['set_5fmsgtomon_5fheader',['set_msgToMon_header',['../message_8h.html#a8c768ba3ccfd64ba1e39079c967aff26',1,'message.h']]], - ['sockaddr',['SOCKADDR',['../monitor_8h.html#ae334b73cedf7204187dce3f817576009',1,'monitor.h']]], - ['sockaddr_5fin',['SOCKADDR_IN',['../monitor_8h.html#a29046dc0232f0e5c70adbc25090d77b8',1,'monitor.h']]], - ['socket',['SOCKET',['../monitor_8h.html#a8dc8083897335125630f1af5dafd5831',1,'monitor.h']]], - ['socket_5ferror',['SOCKET_ERROR',['../monitor_8h.html#a633b0396ff93d336a088412a190a5072',1,'monitor.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_e.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_e.html deleted file mode 100644 index 9fa42bb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_e.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_e.js deleted file mode 100644 index 247fadb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_e.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['width',['WIDTH',['../image_8h.html#a241aeeb764887ae5e3de58b98f04b16d',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_f.html b/software/raspberry/superviseur-robot/lib/doc/html/search/all_f.html deleted file mode 100644 index 6ecfc0e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/all_f.js b/software/raspberry/superviseur-robot/lib/doc/html/search/all_f.js deleted file mode 100644 index 247fadb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/all_f.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['width',['WIDTH',['../image_8h.html#a241aeeb764887ae5e3de58b98f04b16d',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/classes_0.html b/software/raspberry/superviseur-robot/lib/doc/html/search/classes_0.html deleted file mode 100644 index 1c3e406..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/classes_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/classes_0.js b/software/raspberry/superviseur-robot/lib/doc/html/search/classes_0.js deleted file mode 100644 index 380aa44..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/classes_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['messagefrommon',['MessageFromMon',['../struct_message_from_mon.html',1,'']]], - ['messagetomon',['MessageToMon',['../struct_message_to_mon.html',1,'']]], - ['messagetorobot',['MessageToRobot',['../struct_message_to_robot.html',1,'']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/classes_1.html b/software/raspberry/superviseur-robot/lib/doc/html/search/classes_1.html deleted file mode 100644 index a8e7069..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/classes_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/classes_1.js b/software/raspberry/superviseur-robot/lib/doc/html/search/classes_1.js deleted file mode 100644 index c314d7e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/classes_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['position',['Position',['../struct_position.html',1,'']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/close.png b/software/raspberry/superviseur-robot/lib/doc/html/search/close.png deleted file mode 100644 index 9342d3dfeea7b7c4ee610987e717804b5a42ceb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_0.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_0.html deleted file mode 100644 index 5b25204..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_0.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_0.js deleted file mode 100644 index 389746a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_0.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['cam_5farena_5fconfirm',['CAM_ARENA_CONFIRM',['../definitions_8h.html#a15d9063cd3c60755685ceb75df4a7354',1,'definitions.h']]], - ['cam_5farena_5finfirm',['CAM_ARENA_INFIRM',['../definitions_8h.html#ac836c6abc7e32d2cf7f59ed2a8383ca7',1,'definitions.h']]], - ['cam_5fask_5farena',['CAM_ASK_ARENA',['../definitions_8h.html#a6418778d1f34e618aebd9ca1861ab500',1,'definitions.h']]], - ['cam_5fclose',['CAM_CLOSE',['../definitions_8h.html#a675009273c3923e8ad1a6d2818063b61',1,'definitions.h']]], - ['cam_5fcompute_5fposition',['CAM_COMPUTE_POSITION',['../definitions_8h.html#a74fdb9d00556feb699d3c72bd7b5d5e5',1,'definitions.h']]], - ['cam_5fopen',['CAM_OPEN',['../definitions_8h.html#a2a7149bbe097fae8e799ce2ab6f69390',1,'definitions.h']]], - ['cam_5fstop_5fcompute_5fposition',['CAM_STOP_COMPUTE_POSITION',['../definitions_8h.html#ae864cfaefbf5a210e67678b2144a289f',1,'definitions.h']]], - ['check_5farena',['CHECK_ARENA',['../monitor_8h.html#a22d20ac264e03c59d6941cb11386aa89',1,'monitor.h']]], - ['close_5fcom_5fdmb',['CLOSE_COM_DMB',['../definitions_8h.html#a1b18773c1ce9068c4d38c2cbd2900263',1,'definitions.h']]], - ['closesocket',['closesocket',['../monitor_8h.html#ab6b45251e218af8f09c5d627b5262398',1,'monitor.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_1.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_1.html deleted file mode 100644 index 91488cb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_1.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_1.js deleted file mode 100644 index 8a476cc..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_1.js +++ /dev/null @@ -1,28 +0,0 @@ -var searchData= -[ - ['default_5finterface_5ffile',['DEFAULT_INTERFACE_FILE',['../monitor_8h.html#af533d8bd7d6a1d9f9efba3b259280e32',1,'monitor.h']]], - ['default_5fnodejs_5fpath',['DEFAULT_NODEJS_PATH',['../monitor_8h.html#a2c47b710f0858fe41c544517c6b2a2fd',1,'monitor.h']]], - ['default_5fparity',['DEFAULT_PARITY',['../monitor_8h.html#a939612a13947b5bb9fc848e3222a231d',1,'monitor.h']]], - ['default_5fport',['DEFAULT_PORT',['../monitor_8h.html#a16b710f592bf8f7900666392adc444dc',1,'monitor.h']]], - ['default_5fserver_5fport',['DEFAULT_SERVER_PORT',['../server_8h.html#af257e2a3e091629829857a2eb8931a7a',1,'server.h']]], - ['detect_5farena',['DETECT_ARENA',['../monitor_8h.html#ab3be9ae187e8b98bb000ca0bca68e982',1,'monitor.h']]], - ['dmb_5fbat_5fhigh',['DMB_BAT_HIGH',['../definitions_8h.html#ab34c46794a9de6746a96752668c73754',1,'definitions.h']]], - ['dmb_5fbat_5flow',['DMB_BAT_LOW',['../definitions_8h.html#a66c0c4960c1e81c8da8c8e1d4a202352',1,'definitions.h']]], - ['dmb_5fbat_5fmedium',['DMB_BAT_MEDIUM',['../definitions_8h.html#aea6ef1c13db1a8a4a29b065d0c3f73e4',1,'definitions.h']]], - ['dmb_5fbusy',['DMB_BUSY',['../definitions_8h.html#a3327443cd321f0c356a5d3d74377892b',1,'definitions.h']]], - ['dmb_5fdo_5fnothing',['DMB_DO_NOTHING',['../definitions_8h.html#a07650c5f6647c5143bac535fdbeb77d5',1,'definitions.h']]], - ['dmb_5fget_5fvbat',['DMB_GET_VBAT',['../definitions_8h.html#af1737e8fe4da4e8bc2d5db9d26c42462',1,'definitions.h']]], - ['dmb_5fgo_5fback',['DMB_GO_BACK',['../definitions_8h.html#a499f41cc19a4459de033687049cbbe71',1,'definitions.h']]], - ['dmb_5fgo_5fforward',['DMB_GO_FORWARD',['../definitions_8h.html#ae363a29a4961cd8a646a0ca9199bc6cf',1,'definitions.h']]], - ['dmb_5fgo_5fleft',['DMB_GO_LEFT',['../definitions_8h.html#aefcb838e73a335f1a2a6c914ee2ff752',1,'definitions.h']]], - ['dmb_5fgo_5fright',['DMB_GO_RIGHT',['../definitions_8h.html#ad681962f7b8cf4797ebd48be0405d1b9',1,'definitions.h']]], - ['dmb_5fidle',['DMB_IDLE',['../definitions_8h.html#a82b279c49221d3cd3d875d521dfb97b9',1,'definitions.h']]], - ['dmb_5fis_5fbusy',['DMB_IS_BUSY',['../definitions_8h.html#ad58c241121e685f26a291aa4bd5f9c80',1,'definitions.h']]], - ['dmb_5fmove',['DMB_MOVE',['../definitions_8h.html#ac48dee90eb71d036d001321674abbb8b',1,'definitions.h']]], - ['dmb_5fping',['DMB_PING',['../definitions_8h.html#acf7d51360dcb103fc57604725ec2816d',1,'definitions.h']]], - ['dmb_5freload_5fwd',['DMB_RELOAD_WD',['../definitions_8h.html#a2ca219902014ffb39aab27cca08a948f',1,'definitions.h']]], - ['dmb_5fstart_5fwith_5fwd',['DMB_START_WITH_WD',['../definitions_8h.html#adee1628bbc796ba55f4a349895f4e0fa',1,'definitions.h']]], - ['dmb_5fstart_5fwithout_5fwd',['DMB_START_WITHOUT_WD',['../definitions_8h.html#a5ebbd37042a6244b4f9d473ae7132780',1,'definitions.h']]], - ['dmb_5fstop_5fmove',['DMB_STOP_MOVE',['../definitions_8h.html#a7308179907a0a2989c162865e7a7979a',1,'definitions.h']]], - ['dmb_5fturn',['DMB_TURN',['../definitions_8h.html#ac6c5492c8100e73f8d30ed36072684db',1,'definitions.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_2.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_2.html deleted file mode 100644 index 8655993..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_2.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_2.js deleted file mode 100644 index 25b8007..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_2.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['header_5fmts_5fcamera',['HEADER_MTS_CAMERA',['../monitor_8h.html#a91e2658cf20010646211ba748885c180',1,'monitor.h']]], - ['header_5fmts_5fcom_5fdmb',['HEADER_MTS_COM_DMB',['../monitor_8h.html#a0c829d92889c5c9b2d485964ce933fab',1,'monitor.h']]], - ['header_5fmts_5fdmb_5forder',['HEADER_MTS_DMB_ORDER',['../monitor_8h.html#a5ccd30e6502bb94eaa13a597edb1f156',1,'monitor.h']]], - ['header_5fmts_5fmsg',['HEADER_MTS_MSG',['../monitor_8h.html#a980e8f9457e30018fddcd4d997f17a85',1,'monitor.h']]], - ['header_5fmts_5fstop',['HEADER_MTS_STOP',['../monitor_8h.html#a2be30c9a3e65eaf5502b8542a6ac6259',1,'monitor.h']]], - ['header_5fstm_5fack',['HEADER_STM_ACK',['../monitor_8h.html#af2325d19ae9da4310eb608c744149f53',1,'monitor.h']]], - ['header_5fstm_5fbat',['HEADER_STM_BAT',['../monitor_8h.html#a0de226ae5af8b83f3b163ff4413eef95',1,'monitor.h']]], - ['header_5fstm_5fimage',['HEADER_STM_IMAGE',['../monitor_8h.html#ad62b697bd25a71d171db46740aef2830',1,'monitor.h']]], - ['header_5fstm_5flost_5fdmb',['HEADER_STM_LOST_DMB',['../monitor_8h.html#afe29ce74d16751828da8aec7e13ad06b',1,'monitor.h']]], - ['header_5fstm_5fmes',['HEADER_STM_MES',['../monitor_8h.html#ac1034bccb09918cccd3ba142377a6788',1,'monitor.h']]], - ['header_5fstm_5fno_5fack',['HEADER_STM_NO_ACK',['../monitor_8h.html#ac2e64478522da4e3b45c139c0c72557f',1,'monitor.h']]], - ['header_5fstm_5fpos',['HEADER_STM_POS',['../monitor_8h.html#a6a07aae2539981459edc8070a0f019db',1,'monitor.h']]], - ['height',['HEIGHT',['../image_8h.html#aed89bd71aee8be823e8a20ec4e093c1e',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_3.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_3.html deleted file mode 100644 index a55d3ff..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_3.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_3.js deleted file mode 100644 index 8b56e7a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['invalid_5fsocket',['INVALID_SOCKET',['../monitor_8h.html#a26769957ec1a2beaf223f33b66ee64ab',1,'monitor.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_4.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_4.html deleted file mode 100644 index 54da39a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_4.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_4.js deleted file mode 100644 index 052c117..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['no_5farena',['NO_ARENA',['../monitor_8h.html#a1d58e03abc2a587c7f0a0665c94c0e68',1,'monitor.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_5.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_5.html deleted file mode 100644 index dd7bfdc..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_5.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_5.js deleted file mode 100644 index 5761a1f..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['open_5fcom_5fdmb',['OPEN_COM_DMB',['../definitions_8h.html#aac798eaf6994ddcadd8a38ad8aba234f',1,'definitions.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_6.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_6.html deleted file mode 100644 index 58d00e9..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_6.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_6.js deleted file mode 100644 index b08650f..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_6.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['robot_5fchecksum',['ROBOT_CHECKSUM',['../definitions_8h.html#af1118b8a83d446b4965347bba126a488',1,'definitions.h']]], - ['robot_5ferror',['ROBOT_ERROR',['../definitions_8h.html#a4aefbbdd5d35999aa0575ab7183148d4',1,'definitions.h']]], - ['robot_5fok',['ROBOT_OK',['../definitions_8h.html#ad7b2f95c0b423fb9784acb897b910c36',1,'definitions.h']]], - ['robot_5ftimed_5fout',['ROBOT_TIMED_OUT',['../definitions_8h.html#a624686d3af63394ee02f0a197967d44a',1,'definitions.h']]], - ['robot_5fuknown_5fcmd',['ROBOT_UKNOWN_CMD',['../definitions_8h.html#a70a2d5db14b900843364adb7cfe53ac8',1,'definitions.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_7.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_7.html deleted file mode 100644 index 275e1b3..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_7.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_7.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_7.js deleted file mode 100644 index 691f001..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_7.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['serialport',['serialPort',['../robot_8h.html#a32c8768c18732c59b503f8ee7515a693',1,'robot.h']]], - ['socket_5ferror',['SOCKET_ERROR',['../monitor_8h.html#a633b0396ff93d336a088412a190a5072',1,'monitor.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_8.html b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_8.html deleted file mode 100644 index de651d9..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_8.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_8.js b/software/raspberry/superviseur-robot/lib/doc/html/search/defines_8.js deleted file mode 100644 index 247fadb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/defines_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['width',['WIDTH',['../image_8h.html#a241aeeb764887ae5e3de58b98f04b16d',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_0.html b/software/raspberry/superviseur-robot/lib/doc/html/search/files_0.html deleted file mode 100644 index 4f272b8..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_0.js b/software/raspberry/superviseur-robot/lib/doc/html/search/files_0.js deleted file mode 100644 index 2d98f03..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['definitions_2eh',['definitions.h',['../definitions_8h.html',1,'']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_1.html b/software/raspberry/superviseur-robot/lib/doc/html/search/files_1.html deleted file mode 100644 index dcce422..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_1.js b/software/raspberry/superviseur-robot/lib/doc/html/search/files_1.js deleted file mode 100644 index a609633..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['image_2eh',['image.h',['../image_8h.html',1,'']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_2.html b/software/raspberry/superviseur-robot/lib/doc/html/search/files_2.html deleted file mode 100644 index d5c6c3b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_2.js b/software/raspberry/superviseur-robot/lib/doc/html/search/files_2.js deleted file mode 100644 index e3d443c..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['message_2eh',['message.h',['../message_8h.html',1,'']]], - ['monitor_2eh',['monitor.h',['../monitor_8h.html',1,'']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_3.html b/software/raspberry/superviseur-robot/lib/doc/html/search/files_3.html deleted file mode 100644 index d5a9528..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_3.js b/software/raspberry/superviseur-robot/lib/doc/html/search/files_3.js deleted file mode 100644 index afe17a9..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['robot_2eh',['robot.h',['../robot_8h.html',1,'']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_4.html b/software/raspberry/superviseur-robot/lib/doc/html/search/files_4.html deleted file mode 100644 index 7b4c42a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/files_4.js b/software/raspberry/superviseur-robot/lib/doc/html/search/files_4.js deleted file mode 100644 index ef3bc5e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/files_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['server_2eh',['server.h',['../server_8h.html',1,'']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_0.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_0.html deleted file mode 100644 index 4e6d87d..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_0.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_0.js deleted file mode 100644 index e82f937..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['acceptclient',['acceptClient',['../server_8h.html#abff9f8e931ecce919588b371dc511857',1,'server.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_1.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_1.html deleted file mode 100644 index b343e2d..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_1.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_1.js deleted file mode 100644 index 07615ce..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_1.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['close_5fcamera',['close_camera',['../image_8h.html#a19eac11a04cb4b86fd32e6a36445ad5d',1,'image.h']]], - ['close_5fcommunication_5frobot',['close_communication_robot',['../robot_8h.html#a3fbce7530a62f9287f8a3b85b9c7e4d7',1,'robot.h']]], - ['closeserver',['closeServer',['../server_8h.html#ab65b2df50051036defe0f35366f5a3d6',1,'server.h']]], - ['compress_5fimage',['compress_image',['../image_8h.html#a909ca7577f0ac2e4bd0ea21291690dce',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_2.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_2.html deleted file mode 100644 index ecce2f3..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_2.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_2.js deleted file mode 100644 index 36d5731..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_2.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['detect_5farena',['detect_arena',['../image_8h.html#acad45df4061a55f17be0db97c1406249',1,'image.h']]], - ['detect_5fposition',['detect_position',['../image_8h.html#af9f6e2dd4409486f2f6446d1a8a02c40',1,'image.h']]], - ['draw_5farena',['draw_arena',['../image_8h.html#a5ffd032a466af45a505fb46252194bbf',1,'image.h']]], - ['draw_5fposition',['draw_position',['../image_8h.html#a869c3946d4a414b8730ca4f91fbd9556',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_3.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_3.html deleted file mode 100644 index 15f06ab..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_3.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_3.js deleted file mode 100644 index 8d4acc0..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['free_5fmsgtomon_5fdata',['free_msgToMon_data',['../message_8h.html#a285193a5a9d3b142f3f1c53c471d3173',1,'message.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_4.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_4.html deleted file mode 100644 index 8985ff2..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_4.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_4.js deleted file mode 100644 index 55d5041..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['get_5fimage',['get_image',['../image_8h.html#ad904f3348c2d44f9c82435c94cd83844',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_5.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_5.html deleted file mode 100644 index 0314918..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_5.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_5.js deleted file mode 100644 index 74d8e89..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_5.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['open_5fcamera',['open_camera',['../image_8h.html#aca0662ab31eac7fdb2d64fecc52ff1da',1,'image.h']]], - ['open_5fcommunication_5frobot',['open_communication_robot',['../robot_8h.html#a0e70fa821a04d349552b8bd54f6935db',1,'robot.h']]], - ['openserver',['openServer',['../server_8h.html#a99b54d5b3404766f906f49605a4aa0e3',1,'server.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_6.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_6.html deleted file mode 100644 index c506123..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_6.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_6.js deleted file mode 100644 index 1efaebf..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['print_5fmsgtomon',['print_msgToMon',['../message_8h.html#ae409e822d69cee7483a2d41c62698a85',1,'message.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_7.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_7.html deleted file mode 100644 index 83a7b84..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_7.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_7.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_7.js deleted file mode 100644 index c0610c4..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_7.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['receive_5fmessage_5ffrom_5fmonitor',['receive_message_from_monitor',['../monitor_8h.html#a61eca0d5b49118350db39583e1bd1032',1,'monitor.h']]], - ['receivedatafromserver',['receiveDataFromServer',['../server_8h.html#a8b66a2007f3f9ed8538428a309c9d368',1,'server.h']]], - ['receivedatafromserverfromclient',['receiveDataFromServerFromClient',['../server_8h.html#a247e0124af257d0cc7abc25a7c448d1b',1,'server.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_8.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_8.html deleted file mode 100644 index b55f0e6..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_8.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_8.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_8.js deleted file mode 100644 index 116bbfc..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_8.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['send_5fcommand_5fto_5frobot',['send_command_to_robot',['../robot_8h.html#abe88fd581be321a9d86ae7063abd2f65',1,'robot.h']]], - ['send_5fmessage_5fto_5fmonitor',['send_message_to_monitor',['../monitor_8h.html#ac3d876b96642b6ee46f6a96b7ffcb864',1,'monitor.h']]], - ['senddatatoserver',['sendDataToServer',['../server_8h.html#a8d865d29914b980fd71ed8d347e4ec50',1,'server.h']]], - ['senddatatoserverforclient',['sendDataToServerForClient',['../server_8h.html#a4c2df7961aa7379ac79d80980a1c537b',1,'server.h']]], - ['sendimage',['sendImage',['../server_8h.html#a51b9372f5467705aa81d76ae034c7628',1,'server.h']]], - ['set_5fmsgtomon_5fdata',['set_msgToMon_data',['../message_8h.html#aa938f8156bfca7379f533b751334ca6f',1,'message.h']]], - ['set_5fmsgtomon_5fheader',['set_msgToMon_header',['../message_8h.html#a8c768ba3ccfd64ba1e39079c967aff26',1,'message.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_9.html b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_9.html deleted file mode 100644 index c73f07b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_9.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_9.js b/software/raspberry/superviseur-robot/lib/doc/html/search/functions_9.js deleted file mode 100644 index 229021e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/functions_9.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['send_5fcommand_5fto_5frobot',['send_command_to_robot',['../robot_8h.html#abe88fd581be321a9d86ae7063abd2f65',1,'send_command_to_robot(char cmd, const char *arg=NULL): robot.cpp'],['../robot_8cpp.html#a68c01c5d6226d21fc0d141f681806677',1,'send_command_to_robot(char cmd, const char *arg): robot.cpp']]], - ['send_5fmessage_5fto_5fmonitor',['send_message_to_monitor',['../monitor_8h.html#ac3d876b96642b6ee46f6a96b7ffcb864',1,'send_message_to_monitor(const char *typeMessage, const void *data=NULL): monitor.cpp'],['../monitor_8cpp.html#af49d46447ce41019bd13a2c07a000644',1,'send_message_to_monitor(const char *typeMessage, const void *data): monitor.cpp']]], - ['sendcmd',['sendCmd',['../robot_8cpp.html#ac9d64c6d05c20ae9fdb8c158e2ee7098',1,'robot.cpp']]], - ['senddatatoserver',['sendDataToServer',['../server_8h.html#a8d865d29914b980fd71ed8d347e4ec50',1,'sendDataToServer(char *data, int length): server.cpp'],['../server_8cpp.html#a8d865d29914b980fd71ed8d347e4ec50',1,'sendDataToServer(char *data, int length): server.cpp']]], - ['senddatatoserverforclient',['sendDataToServerForClient',['../server_8h.html#a4c2df7961aa7379ac79d80980a1c537b',1,'sendDataToServerForClient(int client, char *data, int length): server.cpp'],['../server_8cpp.html#a4c2df7961aa7379ac79d80980a1c537b',1,'sendDataToServerForClient(int client, char *data, int length): server.cpp']]], - ['sendmessage',['sendMessage',['../monitor_8cpp.html#a7265ec937de7d9ca68b81e5bd8203962',1,'monitor.cpp']]], - ['serverreceive',['serverReceive',['../monitor_8cpp.html#a04c8d7ed93b301fafe6dcc08d64ba21b',1,'monitor.cpp']]], - ['set_5fmsgtomon_5fdata',['set_msgToMon_data',['../message_8h.html#aa938f8156bfca7379f533b751334ca6f',1,'set_msgToMon_data(MessageToMon *msg, void *data): message.cpp'],['../message_8cpp.html#aa938f8156bfca7379f533b751334ca6f',1,'set_msgToMon_data(MessageToMon *msg, void *data): message.cpp']]], - ['set_5fmsgtomon_5fheader',['set_msgToMon_header',['../message_8h.html#a8c768ba3ccfd64ba1e39079c967aff26',1,'set_msgToMon_header(MessageToMon *msg, char *header): message.cpp'],['../message_8cpp.html#a8c768ba3ccfd64ba1e39079c967aff26',1,'set_msgToMon_header(MessageToMon *msg, char *header): message.cpp']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/mag_sel.png b/software/raspberry/superviseur-robot/lib/doc/html/search/mag_sel.png deleted file mode 100644 index 81f6040a2092402b4d98f9ffa8855d12a0d4ca17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/nomatches.html b/software/raspberry/superviseur-robot/lib/doc/html/search/nomatches.html deleted file mode 100644 index b1ded27..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
-
No Matches
-
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/search.css b/software/raspberry/superviseur-robot/lib/doc/html/search/search.css deleted file mode 100644 index 3cf9df9..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - float: none; - margin-top: 8px; - right: 0px; - width: 170px; - height: 24px; - z-index: 102; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:115px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; - -webkit-border-radius: 0px; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:8px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; - z-index:10000; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F0F3F8; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/search.js b/software/raspberry/superviseur-robot/lib/doc/html/search/search.js deleted file mode 100644 index dedce3b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/search.js +++ /dev/null @@ -1,791 +0,0 @@ -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; ek7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/search_r.png b/software/raspberry/superviseur-robot/lib/doc/html/search/search_r.png deleted file mode 100644 index 97ee8b439687084201b79c6f776a41f495c6392a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_0.js b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_0.js deleted file mode 100644 index 3df5a05..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['arene',['Arene',['../image_8h.html#aa856a7cb8a1535c9f13096bede6c8586',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_1.html b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_1.html deleted file mode 100644 index b77c533..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_1.js b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_1.js deleted file mode 100644 index 3c0e5c9..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['camera',['Camera',['../image_8h.html#a739dda3f6f6ddbab22617837b43a692a',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_2.html b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_2.html deleted file mode 100644 index 076311d..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_2.js b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_2.js deleted file mode 100644 index a5f6dfc..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['image',['Image',['../image_8h.html#a466446fef9c0348568bc6743186d1a38',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_3.html b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_3.html deleted file mode 100644 index a4a727f..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_3.js b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_3.js deleted file mode 100644 index 2199e13..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['jpg',['Jpg',['../image_8h.html#a9ac2855e21920c676a108df386ff9415',1,'image.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_4.html b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_4.html deleted file mode 100644 index be033cd..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_4.js b/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_4.js deleted file mode 100644 index a21c8be..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/typedefs_4.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['sockaddr',['SOCKADDR',['../monitor_8h.html#ae334b73cedf7204187dce3f817576009',1,'monitor.h']]], - ['sockaddr_5fin',['SOCKADDR_IN',['../monitor_8h.html#a29046dc0232f0e5c70adbc25090d77b8',1,'monitor.h']]], - ['socket',['SOCKET',['../monitor_8h.html#a8dc8083897335125630f1af5dafd5831',1,'monitor.h']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_0.html b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_0.html deleted file mode 100644 index 74ce807..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_0.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_0.js b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_0.js deleted file mode 100644 index 5d2223d..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['angle',['angle',['../struct_position.html#a733540df6c0f832676dc0846b34bb1e2',1,'Position']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_1.html b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_1.html deleted file mode 100644 index 84237b6..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_1.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_1.js b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_1.js deleted file mode 100644 index bb7f6a4..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['center',['center',['../struct_position.html#aa56444be37071311cfa11aae3e2c2f64',1,'Position']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_2.html b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_2.html deleted file mode 100644 index 5c9de1a..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_2.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_2.js b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_2.js deleted file mode 100644 index 1abf9b6..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['data',['data',['../struct_message_to_mon.html#a4e5977ba9fb3fa07d435155731944d15',1,'MessageToMon::data()'],['../struct_message_from_mon.html#a1aea445500b0fa020a1b08eaff791107',1,'MessageFromMon::data()'],['../struct_message_to_robot.html#abf7dafbba72784855abd50469ba82705',1,'MessageToRobot::data()']]], - ['direction',['direction',['../struct_position.html#a780d124971951424c0c63f6d81bb4d92',1,'Position']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_3.html b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_3.html deleted file mode 100644 index f95e34c..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_3.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_3.js b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_3.js deleted file mode 100644 index 1a30264..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['header',['header',['../struct_message_to_mon.html#acb1096bef5e5c300f3d795556fda852a',1,'MessageToMon::header()'],['../struct_message_from_mon.html#ad46f6e6dd24be5cb2bc5eae5b3cdd095',1,'MessageFromMon::header()'],['../struct_message_to_robot.html#ab00202c6cfdd86ea4cd891c972405db6',1,'MessageToRobot::header()']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_4.html b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_4.html deleted file mode 100644 index d7db285..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_4.js b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_4.js deleted file mode 100644 index 1a30264..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['header',['header',['../struct_message_to_mon.html#acb1096bef5e5c300f3d795556fda852a',1,'MessageToMon::header()'],['../struct_message_from_mon.html#ad46f6e6dd24be5cb2bc5eae5b3cdd095',1,'MessageFromMon::header()'],['../struct_message_to_robot.html#ab00202c6cfdd86ea4cd891c972405db6',1,'MessageToRobot::header()']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_5.html b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_5.html deleted file mode 100644 index 7bbceeb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_5.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_5.js b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_5.js deleted file mode 100644 index 35e2e9d..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['recsize',['recsize',['../monitor_8cpp.html#acd1a03adb2455aaacbd886642518d569',1,'monitor.cpp']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_6.html b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_6.html deleted file mode 100644 index 4eb162d..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_6.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_6.js b/software/raspberry/superviseur-robot/lib/doc/html/search/variables_6.js deleted file mode 100644 index 3eb3616..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/search/variables_6.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['sock',['sock',['../monitor_8cpp.html#a6e91849780a994f2adde299b33642829',1,'monitor.cpp']]], - ['socketfd',['socketFD',['../server_8cpp.html#a67917b0d31c20024dba33363eb8db5a2',1,'server.cpp']]], - ['ssin',['ssin',['../monitor_8cpp.html#a1f38ae3a59ce304779ebbca10378654a',1,'monitor.cpp']]] -]; diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp.html b/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp.html deleted file mode 100644 index 239257b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp.html +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - - -Bibliotheques TP RT: src/server.cpp File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
server.cpp File Reference
-
-
- -

Library for opening a TCP server, receiving data and sending message to monitor. -More...

-
#include "server.h"
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-Include dependency graph for server.cpp:
-
-
- - - -
-
-

Go to the source code of this file.

- - - - -

-Macros

#define NB_CONNECTION_MAX   1
 
- - - - - - - - - - - - - - - -

-Functions

int openServer (int port)
 
int closeServer ()
 
int acceptClient ()
 
int sendDataToServer (char *data, int length)
 
int sendDataToServerForClient (int client, char *data, int length)
 
int receiveDataFromServer (char *data, int size)
 
int receiveDataFromServerFromClient (int client, char *data, int size)
 
- - - - - -

-Variables

int socketFD = -1
 
int clientID = -1
 
-

Detailed Description

-

Library for opening a TCP server, receiving data and sending message to monitor.

-
Author
PE.Hladik
-
Version
1.0
-
Date
06/06/2017
- -

Definition in file server.cpp.

-

Macro Definition Documentation

- -

◆ NB_CONNECTION_MAX

- -
-
- - - - -
#define NB_CONNECTION_MAX   1
-
- -

Definition at line 35 of file server.cpp.

- -
-
-

Function Documentation

- -

◆ acceptClient()

- -
-
- - - - - - - -
int acceptClient ()
-
- -

Definition at line 71 of file server.cpp.

- -
-
- -

◆ closeServer()

- -
-
- - - - - - - -
int closeServer ()
-
- -

Definition at line 63 of file server.cpp.

- -
-
- -

◆ openServer()

- -
-
- - - - - - - - -
int openServer (int port)
-
- -

Definition at line 40 of file server.cpp.

- -
-
- -

◆ receiveDataFromServer()

- -
-
- - - - - - - - - - - - - - - - - - -
int receiveDataFromServer (char * data,
int size 
)
-
- -

Definition at line 95 of file server.cpp.

- -
-
- -

◆ receiveDataFromServerFromClient()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int receiveDataFromServerFromClient (int client,
char * data,
int size 
)
-
- -

Definition at line 99 of file server.cpp.

- -
-
- -

◆ sendDataToServer()

- -
-
- - - - - - - - - - - - - - - - - - -
int sendDataToServer (char * data,
int length 
)
-
- -

Definition at line 85 of file server.cpp.

- -
-
- -

◆ sendDataToServerForClient()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int sendDataToServerForClient (int client,
char * data,
int length 
)
-
- -

Definition at line 89 of file server.cpp.

- -
-
-

Variable Documentation

- -

◆ clientID

- -
-
- - - - -
int clientID = -1
-
- -

Definition at line 38 of file server.cpp.

- -
-
- -

◆ socketFD

- -
-
- - - - -
int socketFD = -1
-
- -

Definition at line 37 of file server.cpp.

- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp.js b/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp.js deleted file mode 100644 index c22f2e6..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp.js +++ /dev/null @@ -1,13 +0,0 @@ -var server_8cpp = -[ - [ "NB_CONNECTION_MAX", "server_8cpp.html#ad1106125b13c36a78d012177dc2aa67c", null ], - [ "acceptClient", "server_8cpp.html#abff9f8e931ecce919588b371dc511857", null ], - [ "closeServer", "server_8cpp.html#ab65b2df50051036defe0f35366f5a3d6", null ], - [ "openServer", "server_8cpp.html#a99b54d5b3404766f906f49605a4aa0e3", null ], - [ "receiveDataFromServer", "server_8cpp.html#a8b66a2007f3f9ed8538428a309c9d368", null ], - [ "receiveDataFromServerFromClient", "server_8cpp.html#a247e0124af257d0cc7abc25a7c448d1b", null ], - [ "sendDataToServer", "server_8cpp.html#a8d865d29914b980fd71ed8d347e4ec50", null ], - [ "sendDataToServerForClient", "server_8cpp.html#a4c2df7961aa7379ac79d80980a1c537b", null ], - [ "clientID", "server_8cpp.html#a2e938cd63a2404d0902c57205706872a", null ], - [ "socketFD", "server_8cpp.html#a67917b0d31c20024dba33363eb8db5a2", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.map deleted file mode 100644 index 8d35f84..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.md5 deleted file mode 100644 index 1a78bf6..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -51d07197f818cd5682cf375b3f0bed2e \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp__incl.png deleted file mode 100644 index d75f091351f217a46f3a6be5ec1d176a1a52fd94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12681 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp_source.html b/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp_source.html deleted file mode 100644 index 2daf759..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8cpp_source.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Bibliotheques TP RT: src/server.cpp Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
server.cpp
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
26 #include "server.h"
27 #include <sys/socket.h>
28 #include <arpa/inet.h>
29 #include <netinet/in.h>
30 
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <unistd.h>
34 
35 #define NB_CONNECTION_MAX 1
36 
37 int socketFD = -1;
38 int clientID = -1;
39 
40 int openServer(int port) {
41  struct sockaddr_in server;
42 
43  socketFD = socket(AF_INET, SOCK_STREAM, 0);
44  if (socketFD < 0) {
45  perror("Can not create socket");
46  exit(-1);
47  }
48 
49  server.sin_addr.s_addr = INADDR_ANY;
50  server.sin_family = AF_INET;
51  server.sin_port = htons(port);
52 
53  if (bind(socketFD, (struct sockaddr *) &server, sizeof (server)) < 0) {
54  perror("Can not bind socket");
55  exit(-1);
56  }
57 
58  listen(socketFD, NB_CONNECTION_MAX);
59 
60  return socketFD;
61 }
62 
63 int closeServer() {
64  close(socketFD);
65 
66  socketFD = -1;
67 
68  return 0;
69 }
70 
71 int acceptClient() {
72  struct sockaddr_in client;
73  int c = sizeof (struct sockaddr_in);
74 
75  clientID = accept(socketFD, (struct sockaddr *) &client, (socklen_t*) & c);
76 
77  if (clientID < 0) {
78  perror("Accept failed in acceptClient");
79  exit(-1);
80  }
81 
82  return clientID;
83 }
84 
85 int sendDataToServer(char *data, int length) {
86  return sendDataToServerForClient(clientID, data, length);
87 }
88 
89 int sendDataToServerForClient(int client, char *data, int length) {
90  if (client >= 0)
91  return write(client, (void*)data, length);
92  else return 0;
93 }
94 
95 int receiveDataFromServer(char *data, int size) {
96  return receiveDataFromServerFromClient(clientID, data, size);
97 }
98 
99 int receiveDataFromServerFromClient(int client, char *data, int size) {
100  char length = 0;
101 
102  if (client > 0) {
103  if ((length = recv(client, (void*)data, size, 0)) > 0) {
104  data[length] = 0;
105  }
106  }
107 
108  return length;
109 }
110 
111 
112 
113 
int receiveDataFromServerFromClient(int client, char *data, int size)
Definition: server.cpp:99
-
int closeServer()
Definition: server.cpp:63
-
#define NB_CONNECTION_MAX
Definition: server.cpp:35
-
int clientID
Definition: server.cpp:38
- -
int receiveDataFromServer(char *data, int size)
Definition: server.cpp:95
-
int openServer(int port)
Definition: server.cpp:40
-
int acceptClient()
Definition: server.cpp:71
-
int socketFD
Definition: server.cpp:37
-
int sendDataToServerForClient(int client, char *data, int length)
Definition: server.cpp:89
-
int sendDataToServer(char *data, int length)
Definition: server.cpp:85
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8h.html b/software/raspberry/superviseur-robot/lib/doc/html/server_8h.html deleted file mode 100644 index d060c12..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8h.html +++ /dev/null @@ -1,441 +0,0 @@ - - - - - - - -Bibliotheques TP RT: server.h File Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
server.h File Reference
-
-
- -

Library for opening a TCP server, receiving data and sending message to monitor. -More...

-
#include "image.h"
-
-Include dependency graph for server.h:
-
-
- - - -
-
-

Go to the source code of this file.

- - - - -

-Macros

#define DEFAULT_SERVER_PORT   2323
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

int openServer (int port)
 Open server port, connect and listen to given port. More...
 
int closeServer ()
 Close server. More...
 
int acceptClient ()
 Wait for a client to connect. More...
 
int sendDataToServer (char *data, int length)
 Send given data to monitor. More...
 
int sendDataToServerForClient (int client, char *data, int length)
 Send given data to monitor, using specific client ID. More...
 
int receiveDataFromServer (char *data, int size)
 Read data from monitor. More...
 
int receiveDataFromServerFromClient (int client, char *data, int size)
 Read data from monitor, using specific client ID. More...
 
int sendImage (Jpg *image)
 Send image to monitor using default client ID. More...
 
-

Detailed Description

-

Library for opening a TCP server, receiving data and sending message to monitor.

-
Author
PE.Hladik
-
Version
1.0
-
Date
06/06/2017
- -

Definition in file server.h.

-

Macro Definition Documentation

- -

◆ DEFAULT_SERVER_PORT

- -
-
- - - - -
#define DEFAULT_SERVER_PORT   2323
-
- -

Definition at line 30 of file server.h.

- -
-
-

Function Documentation

- -

◆ acceptClient()

- -
-
- - - - - - - -
int acceptClient ()
-
- -

Wait for a client to connect.

-
Returns
Return client Id or -1 if it failed
- -
-
- -

◆ closeServer()

- -
-
- - - - - - - -
int closeServer ()
-
- -

Close server.

-
Returns
-1 if closing failed , 0 otherwise
- -
-
- -

◆ openServer()

- -
-
- - - - - - - - -
int openServer (int port)
-
- -

Open server port, connect and listen to given port.

-
Parameters
- - -
portA valid port number (1024 - 65535)
-
-
-
Returns
-1 if opening failed or the socket number
- -
-
- -

◆ receiveDataFromServer()

- -
-
- - - - - - - - - - - - - - - - - - -
int receiveDataFromServer (char * data,
int size 
)
-
- -

Read data from monitor.

-

Read, at most, size data from monitor. Data must be a valid pointer to a buffer large enough.

-
Parameters
- - - -
dataA valid pointer to a buffer
sizeAmount of data to read
-
-
-
Returns
Return amount of data really received. 0 if communication is broken
- -
-
- -

◆ receiveDataFromServerFromClient()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int receiveDataFromServerFromClient (int client,
char * data,
int size 
)
-
- -

Read data from monitor, using specific client ID.

-

Read, at most, size data from monitor. Data must be a valid pointer to a buffer large enough.

-
Parameters
- - - - -
clientClient Id to receive from
dataA valid pointer to a buffer
sizeAmount of data to read
-
-
-
Returns
Return amount of data really received. 0 if communication is broken
- -
-
- -

◆ sendDataToServer()

- -
-
- - - - - - - - - - - - - - - - - - -
int sendDataToServer (char * data,
int length 
)
-
- -

Send given data to monitor.

-

Send given data to monitor using default client ID

-
Parameters
- - - -
dataA valid pointer to a buffer
lengthAmount of data to send
-
-
-
Returns
Return amount of data really written. 0 if communication is broken
- -
-
- -

◆ sendDataToServerForClient()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int sendDataToServerForClient (int client,
char * data,
int length 
)
-
- -

Send given data to monitor, using specific client ID.

-

Send given data to monitor using given client ID.

-
Parameters
- - - - -
clientClient Id to send data to
dataA valid pointer to a buffer
lengthAmount of data to send
-
-
-
Returns
Return amount of data really written. 0 if communication is broken
- -
-
- -

◆ sendImage()

- -
-
- - - - - - - - -
int sendImage (Jpgimage)
-
- -

Send image to monitor using default client ID.

-

Convert image to raw data, and add correct header before sending to monitor

-
Parameters
- - -
imageAn image object after compression
-
-
-
Returns
Return amount of data really received. 0 if communication is broken
- -
-
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8h.js b/software/raspberry/superviseur-robot/lib/doc/html/server_8h.js deleted file mode 100644 index 02acab3..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8h.js +++ /dev/null @@ -1,12 +0,0 @@ -var server_8h = -[ - [ "DEFAULT_SERVER_PORT", "server_8h.html#af257e2a3e091629829857a2eb8931a7a", null ], - [ "acceptClient", "server_8h.html#abff9f8e931ecce919588b371dc511857", null ], - [ "closeServer", "server_8h.html#ab65b2df50051036defe0f35366f5a3d6", null ], - [ "openServer", "server_8h.html#a99b54d5b3404766f906f49605a4aa0e3", null ], - [ "receiveDataFromServer", "server_8h.html#a8b66a2007f3f9ed8538428a309c9d368", null ], - [ "receiveDataFromServerFromClient", "server_8h.html#a247e0124af257d0cc7abc25a7c448d1b", null ], - [ "sendDataToServer", "server_8h.html#a8d865d29914b980fd71ed8d347e4ec50", null ], - [ "sendDataToServerForClient", "server_8h.html#a4c2df7961aa7379ac79d80980a1c537b", null ], - [ "sendImage", "server_8h.html#a51b9372f5467705aa81d76ae034c7628", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.map deleted file mode 100644 index 363b09e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.md5 deleted file mode 100644 index 9f4d061..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -2b1d20aa36893ad804427c79a70e4ebe \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/server_8h__dep__incl.png deleted file mode 100644 index c1e4185daed9ce5d837f2d6599af99d4cf8c9205..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4505 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.map b/software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.map deleted file mode 100644 index 70c40e7..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.md5 deleted file mode 100644 index bafbd82..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d7f1f00c08ba5d2485254fbdd765c26a \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.png b/software/raspberry/superviseur-robot/lib/doc/html/server_8h__incl.png deleted file mode 100644 index 1d0f12288d901532a4e345ab768dab26dcf5efb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10727 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 - - - - - - -Bibliotheques TP RT: server.h Source File - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
server.h
-
-
-Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 dimercur
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
26 #ifndef _SERVER_H_
27 #define _SERVER_H_
28 
29 #include "image.h"
30 #define DEFAULT_SERVER_PORT 2323
31 
38 int openServer (int port);
39 
45 int closeServer();
46 
52 int acceptClient();
53 
62 int sendDataToServer(char *data, int length);
63 
73 int sendDataToServerForClient(int client, char *data, int length);
74 
83 int receiveDataFromServer(char *data, int size);
84 
94 int receiveDataFromServerFromClient(int client, char *data, int size);
95 
103 int sendImage(Jpg *image);
104 #endif /* _SERVER_H_ */
105 
int openServer(int port)
Open server port, connect and listen to given port.
-
Functions for image treatment.
-
int closeServer()
Close server.
-
int sendImage(Jpg *image)
Send image to monitor using default client ID.
-
vector< unsigned char > Jpg
Definition: image.h:67
-
int receiveDataFromServerFromClient(int client, char *data, int size)
Read data from monitor, using specific client ID.
-
int receiveDataFromServer(char *data, int size)
Read data from monitor.
-
int sendDataToServer(char *data, int length)
Send given data to monitor.
-
int sendDataToServerForClient(int client, char *data, int length)
Send given data to monitor, using specific client ID.
-
int acceptClient()
Wait for a client to connect.
-
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/splitbar.png b/software/raspberry/superviseur-robot/lib/doc/html/splitbar.png deleted file mode 100644 index fe895f2c58179b471a22d8320b39a4bd7312ec8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon-members.html b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon-members.html deleted file mode 100644 index 432e716..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon-members.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Member List - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MessageFromMon Member List
-
-
- -

This is the complete list of members for MessageFromMon, including all inherited members.

- - - -
dataMessageFromMon
headerMessageFromMon
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon.html b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon.html deleted file mode 100644 index c1ea325..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -Bibliotheques TP RT: MessageFromMon Struct Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MessageFromMon Struct Reference
-
-
- -

#include <monitor.h>

- - - - - - -

-Public Attributes

char header [4]
 
char data [100]
 
-

Detailed Description

-
-

Definition at line 74 of file monitor.h.

-

Member Data Documentation

- -

◆ data

- -
-
- - - - -
char MessageFromMon::data[100]
-
- -

Definition at line 76 of file monitor.h.

- -
-
- -

◆ header

- -
-
- - - - -
char MessageFromMon::header[4]
-
- -

Definition at line 75 of file monitor.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon.js b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon.js deleted file mode 100644 index d4dc39f..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_from_mon.js +++ /dev/null @@ -1,5 +0,0 @@ -var struct_message_from_mon = -[ - [ "data", "struct_message_from_mon.html#a1aea445500b0fa020a1b08eaff791107", null ], - [ "header", "struct_message_from_mon.html#ad46f6e6dd24be5cb2bc5eae5b3cdd095", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon-members.html b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon-members.html deleted file mode 100644 index 5205875..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon-members.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Member List - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MessageToMon Member List
-
-
- -

This is the complete list of members for MessageToMon, including all inherited members.

- - - -
dataMessageToMon
headerMessageToMon
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon.html b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon.html deleted file mode 100644 index 586e861..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -Bibliotheques TP RT: MessageToMon Struct Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MessageToMon Struct Reference
-
-
- -

#include <message.h>

- - - - - - -

-Public Attributes

char header [4]
 
void * data = NULL
 
-

Detailed Description

-
-

Definition at line 34 of file message.h.

-

Member Data Documentation

- -

◆ data

- -
-
- - - - -
void* MessageToMon::data = NULL
-
- -

Definition at line 36 of file message.h.

- -
-
- -

◆ header

- -
-
- - - - -
char MessageToMon::header[4]
-
- -

Definition at line 35 of file message.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon.js b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon.js deleted file mode 100644 index 6e05a04..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_mon.js +++ /dev/null @@ -1,5 +0,0 @@ -var struct_message_to_mon = -[ - [ "data", "struct_message_to_mon.html#a4e5977ba9fb3fa07d435155731944d15", null ], - [ "header", "struct_message_to_mon.html#acb1096bef5e5c300f3d795556fda852a", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot-members.html b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot-members.html deleted file mode 100644 index edcc384..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot-members.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Member List - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MessageToRobot Member List
-
-
- -

This is the complete list of members for MessageToRobot, including all inherited members.

- - - -
dataMessageToRobot
headerMessageToRobot
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot.html b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot.html deleted file mode 100644 index fca57de..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -Bibliotheques TP RT: MessageToRobot Struct Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MessageToRobot Struct Reference
-
-
- -

#include <robot.h>

- - - - - - -

-Public Attributes

char header [4]
 
char data [20]
 
-

Detailed Description

-
-

Definition at line 43 of file robot.h.

-

Member Data Documentation

- -

◆ data

- -
-
- - - - -
char MessageToRobot::data[20]
-
- -

Definition at line 46 of file robot.h.

- -
-
- -

◆ header

- -
-
- - - - -
char MessageToRobot::header[4]
-
- -

Definition at line 45 of file robot.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot.js b/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot.js deleted file mode 100644 index a544900..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_message_to_robot.js +++ /dev/null @@ -1,5 +0,0 @@ -var struct_message_to_robot = -[ - [ "data", "struct_message_to_robot.html#abf7dafbba72784855abd50469ba82705", null ], - [ "header", "struct_message_to_robot.html#ab00202c6cfdd86ea4cd891c972405db6", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_position-members.html b/software/raspberry/superviseur-robot/lib/doc/html/struct_position-members.html deleted file mode 100644 index 66b16f0..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_position-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Member List - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Position Member List
-
-
- -

This is the complete list of members for Position, including all inherited members.

- - - - -
anglePosition
centerPosition
directionPosition
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_position.html b/software/raspberry/superviseur-robot/lib/doc/html/struct_position.html deleted file mode 100644 index cfcb856..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_position.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Position Struct Reference - - - - - - - - - - - - - - -
-
- - - - - - - -
-
Bibliotheques TP RT -  1.0 -
-
Bibliotheque de support pour TP/RT
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Position Struct Reference
-
-
- -

#include <image.h>

- - - - - - - - -

-Public Attributes

Point center
 
Point direction
 
float angle
 
-

Detailed Description

-
-

Definition at line 69 of file image.h.

-

Member Data Documentation

- -

◆ angle

- -
-
- - - - -
float Position::angle
-
- -

Definition at line 72 of file image.h.

- -
-
- -

◆ center

- -
-
- - - - -
Point Position::center
-
- -

Definition at line 70 of file image.h.

- -
-
- -

◆ direction

- -
-
- - - - -
Point Position::direction
-
- -

Definition at line 71 of file image.h.

- -
-
-
The documentation for this struct was generated from the following file: -
-
- - - - diff --git a/software/raspberry/superviseur-robot/lib/doc/html/struct_position.js b/software/raspberry/superviseur-robot/lib/doc/html/struct_position.js deleted file mode 100644 index f2d0da1..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/struct_position.js +++ /dev/null @@ -1,6 +0,0 @@ -var struct_position = -[ - [ "angle", "struct_position.html#a733540df6c0f832676dc0846b34bb1e2", null ], - [ "center", "struct_position.html#aa56444be37071311cfa11aae3e2c2f64", null ], - [ "direction", "struct_position.html#a780d124971951424c0c63f6d81bb4d92", null ] -]; \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/html/sync_off.png b/software/raspberry/superviseur-robot/lib/doc/html/sync_off.png deleted file mode 100644 index 3b443fc62892114406e3d399421b2a881b897acc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* diff --git a/software/raspberry/superviseur-robot/lib/doc/html/sync_on.png b/software/raspberry/superviseur-robot/lib/doc/html/sync_on.png deleted file mode 100644 index e08320fb64e6fa33b573005ed6d8fe294e19db76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/tab_a.png b/software/raspberry/superviseur-robot/lib/doc/html/tab_a.png deleted file mode 100644 index 3b725c41c5a527a3a3e40097077d0e206a681247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 diff --git a/software/raspberry/superviseur-robot/lib/doc/html/tab_b.png b/software/raspberry/superviseur-robot/lib/doc/html/tab_b.png deleted file mode 100644 index e2b4a8638cb3496a016eaed9e16ffc12846dea18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ diff --git a/software/raspberry/superviseur-robot/lib/doc/html/tabs.css b/software/raspberry/superviseur-robot/lib/doc/html/tabs.css deleted file mode 100644 index bbde11e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/tabs.css +++ /dev/null @@ -1 +0,0 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:transparent}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/annotated.tex b/software/raspberry/superviseur-robot/lib/doc/latex/annotated.tex deleted file mode 100644 index cbbe8b0..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/annotated.tex +++ /dev/null @@ -1,7 +0,0 @@ -\section{Class List} -Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList} -\item\contentsline{section}{\hyperlink{struct_message_from_mon}{Message\+From\+Mon} }{\pageref{struct_message_from_mon}}{} -\item\contentsline{section}{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} }{\pageref{struct_message_to_mon}}{} -\item\contentsline{section}{\hyperlink{struct_message_to_robot}{Message\+To\+Robot} }{\pageref{struct_message_to_robot}}{} -\item\contentsline{section}{\hyperlink{struct_position}{Position} }{\pageref{struct_position}}{} -\end{DoxyCompactList} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h.tex b/software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h.tex deleted file mode 100644 index aaba1f1..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h.tex +++ /dev/null @@ -1,430 +0,0 @@ -\hypertarget{definitions_8h}{}\section{definitions.\+h File Reference} -\label{definitions_8h}\index{definitions.\+h@{definitions.\+h}} - - -Various constants used in destjil project. - - -This graph shows which files directly or indirectly include this file\+:\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=202pt]{definitions_8h__dep__incl} -\end{center} -\end{figure} -\subsection*{Macros} -\begin{DoxyCompactItemize} -\item -\#define \hyperlink{definitions_8h_aac798eaf6994ddcadd8a38ad8aba234f}{O\+P\+E\+N\+\_\+\+C\+O\+M\+\_\+\+D\+MB}~\textquotesingle{}o\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a1b18773c1ce9068c4d38c2cbd2900263}{C\+L\+O\+S\+E\+\_\+\+C\+O\+M\+\_\+\+D\+MB}~\textquotesingle{}C\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_acf7d51360dcb103fc57604725ec2816d}{D\+M\+B\+\_\+\+P\+I\+NG}~\textquotesingle{}p\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a82b279c49221d3cd3d875d521dfb97b9}{D\+M\+B\+\_\+\+I\+D\+LE}~\textquotesingle{}r\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a5ebbd37042a6244b4f9d473ae7132780}{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+O\+U\+T\+\_\+\+WD}~\textquotesingle{}u\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_adee1628bbc796ba55f4a349895f4e0fa}{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+\_\+\+WD}~\textquotesingle{}W\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a2ca219902014ffb39aab27cca08a948f}{D\+M\+B\+\_\+\+R\+E\+L\+O\+A\+D\+\_\+\+WD}~\textquotesingle{}w\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_af1737e8fe4da4e8bc2d5db9d26c42462}{D\+M\+B\+\_\+\+G\+E\+T\+\_\+\+V\+B\+AT}~\textquotesingle{}v\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_ad58c241121e685f26a291aa4bd5f9c80}{D\+M\+B\+\_\+\+I\+S\+\_\+\+B\+U\+SY}~\textquotesingle{}b\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_ac48dee90eb71d036d001321674abbb8b}{D\+M\+B\+\_\+\+M\+O\+VE}~\textquotesingle{}M\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_ac6c5492c8100e73f8d30ed36072684db}{D\+M\+B\+\_\+\+T\+U\+RN}~\textquotesingle{}T\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_ae363a29a4961cd8a646a0ca9199bc6cf}{D\+M\+B\+\_\+\+G\+O\+\_\+\+F\+O\+R\+W\+A\+RD}~\textquotesingle{}F\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a499f41cc19a4459de033687049cbbe71}{D\+M\+B\+\_\+\+G\+O\+\_\+\+B\+A\+CK}~\textquotesingle{}B\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_aefcb838e73a335f1a2a6c914ee2ff752}{D\+M\+B\+\_\+\+G\+O\+\_\+\+L\+E\+FT}~\textquotesingle{}L\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_ad681962f7b8cf4797ebd48be0405d1b9}{D\+M\+B\+\_\+\+G\+O\+\_\+\+R\+I\+G\+HT}~\textquotesingle{}R\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a7308179907a0a2989c162865e7a7979a}{D\+M\+B\+\_\+\+S\+T\+O\+P\+\_\+\+M\+O\+VE}~\textquotesingle{}S\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a624686d3af63394ee02f0a197967d44a}{R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT}~-\/3 -\item -\#define \hyperlink{definitions_8h_a70a2d5db14b900843364adb7cfe53ac8}{R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+N\+\_\+\+C\+MD}~-\/2 -\item -\#define \hyperlink{definitions_8h_a4aefbbdd5d35999aa0575ab7183148d4}{R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR}~-\/1 -\item -\#define \hyperlink{definitions_8h_af1118b8a83d446b4965347bba126a488}{R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+C\+K\+S\+UM}~-\/4 -\item -\#define \hyperlink{definitions_8h_ad7b2f95c0b423fb9784acb897b910c36}{R\+O\+B\+O\+T\+\_\+\+OK}~0 -\item -\#define \hyperlink{definitions_8h_a2a7149bbe097fae8e799ce2ab6f69390}{C\+A\+M\+\_\+\+O\+P\+EN}~\textquotesingle{}A\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a675009273c3923e8ad1a6d2818063b61}{C\+A\+M\+\_\+\+C\+L\+O\+SE}~\textquotesingle{}I\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a6418778d1f34e618aebd9ca1861ab500}{C\+A\+M\+\_\+\+A\+S\+K\+\_\+\+A\+R\+E\+NA}~\textquotesingle{}y\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a15d9063cd3c60755685ceb75df4a7354}{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+C\+O\+N\+F\+I\+RM}~\textquotesingle{}x\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_ac836c6abc7e32d2cf7f59ed2a8383ca7}{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+I\+N\+F\+I\+RM}~\textquotesingle{}z\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a74fdb9d00556feb699d3c72bd7b5d5e5}{C\+A\+M\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON}~\textquotesingle{}p\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_ae864cfaefbf5a210e67678b2144a289f}{C\+A\+M\+\_\+\+S\+T\+O\+P\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON}~\textquotesingle{}s\textquotesingle{} -\item -\#define \hyperlink{definitions_8h_a66c0c4960c1e81c8da8c8e1d4a202352}{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+L\+OW}~0 -\item -\#define \hyperlink{definitions_8h_aea6ef1c13db1a8a4a29b065d0c3f73e4}{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+M\+E\+D\+I\+UM}~1 -\item -\#define \hyperlink{definitions_8h_ab34c46794a9de6746a96752668c73754}{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+H\+I\+GH}~2 -\item -\#define \hyperlink{definitions_8h_a3327443cd321f0c356a5d3d74377892b}{D\+M\+B\+\_\+\+B\+U\+SY}~1 -\item -\#define \hyperlink{definitions_8h_a07650c5f6647c5143bac535fdbeb77d5}{D\+M\+B\+\_\+\+D\+O\+\_\+\+N\+O\+T\+H\+I\+NG}~0 -\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Various constants used in destjil project. - -\begin{DoxyAuthor}{Author} -P\+E.\+Hladik -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} - - -\subsection{Macro Definition Documentation} -\mbox{\Hypertarget{definitions_8h_a15d9063cd3c60755685ceb75df4a7354}\label{definitions_8h_a15d9063cd3c60755685ceb75df4a7354}} -\index{definitions.\+h@{definitions.\+h}!C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+C\+O\+N\+F\+I\+RM@{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+C\+O\+N\+F\+I\+RM}} -\index{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+C\+O\+N\+F\+I\+RM@{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+C\+O\+N\+F\+I\+RM}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+C\+O\+N\+F\+I\+RM}{CAM\_ARENA\_CONFIRM}} -{\footnotesize\ttfamily \#define C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+C\+O\+N\+F\+I\+RM~\textquotesingle{}x\textquotesingle{}} - - - -Definition at line 57 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ac836c6abc7e32d2cf7f59ed2a8383ca7}\label{definitions_8h_ac836c6abc7e32d2cf7f59ed2a8383ca7}} -\index{definitions.\+h@{definitions.\+h}!C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+I\+N\+F\+I\+RM@{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+I\+N\+F\+I\+RM}} -\index{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+I\+N\+F\+I\+RM@{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+I\+N\+F\+I\+RM}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+I\+N\+F\+I\+RM}{CAM\_ARENA\_INFIRM}} -{\footnotesize\ttfamily \#define C\+A\+M\+\_\+\+A\+R\+E\+N\+A\+\_\+\+I\+N\+F\+I\+RM~\textquotesingle{}z\textquotesingle{}} - - - -Definition at line 58 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a6418778d1f34e618aebd9ca1861ab500}\label{definitions_8h_a6418778d1f34e618aebd9ca1861ab500}} -\index{definitions.\+h@{definitions.\+h}!C\+A\+M\+\_\+\+A\+S\+K\+\_\+\+A\+R\+E\+NA@{C\+A\+M\+\_\+\+A\+S\+K\+\_\+\+A\+R\+E\+NA}} -\index{C\+A\+M\+\_\+\+A\+S\+K\+\_\+\+A\+R\+E\+NA@{C\+A\+M\+\_\+\+A\+S\+K\+\_\+\+A\+R\+E\+NA}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{C\+A\+M\+\_\+\+A\+S\+K\+\_\+\+A\+R\+E\+NA}{CAM\_ASK\_ARENA}} -{\footnotesize\ttfamily \#define C\+A\+M\+\_\+\+A\+S\+K\+\_\+\+A\+R\+E\+NA~\textquotesingle{}y\textquotesingle{}} - - - -Definition at line 56 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a675009273c3923e8ad1a6d2818063b61}\label{definitions_8h_a675009273c3923e8ad1a6d2818063b61}} -\index{definitions.\+h@{definitions.\+h}!C\+A\+M\+\_\+\+C\+L\+O\+SE@{C\+A\+M\+\_\+\+C\+L\+O\+SE}} -\index{C\+A\+M\+\_\+\+C\+L\+O\+SE@{C\+A\+M\+\_\+\+C\+L\+O\+SE}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{C\+A\+M\+\_\+\+C\+L\+O\+SE}{CAM\_CLOSE}} -{\footnotesize\ttfamily \#define C\+A\+M\+\_\+\+C\+L\+O\+SE~\textquotesingle{}I\textquotesingle{}} - - - -Definition at line 55 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a74fdb9d00556feb699d3c72bd7b5d5e5}\label{definitions_8h_a74fdb9d00556feb699d3c72bd7b5d5e5}} -\index{definitions.\+h@{definitions.\+h}!C\+A\+M\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON@{C\+A\+M\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON}} -\index{C\+A\+M\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON@{C\+A\+M\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{C\+A\+M\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON}{CAM\_COMPUTE\_POSITION}} -{\footnotesize\ttfamily \#define C\+A\+M\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON~\textquotesingle{}p\textquotesingle{}} - - - -Definition at line 59 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a2a7149bbe097fae8e799ce2ab6f69390}\label{definitions_8h_a2a7149bbe097fae8e799ce2ab6f69390}} -\index{definitions.\+h@{definitions.\+h}!C\+A\+M\+\_\+\+O\+P\+EN@{C\+A\+M\+\_\+\+O\+P\+EN}} -\index{C\+A\+M\+\_\+\+O\+P\+EN@{C\+A\+M\+\_\+\+O\+P\+EN}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{C\+A\+M\+\_\+\+O\+P\+EN}{CAM\_OPEN}} -{\footnotesize\ttfamily \#define C\+A\+M\+\_\+\+O\+P\+EN~\textquotesingle{}A\textquotesingle{}} - - - -Definition at line 54 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ae864cfaefbf5a210e67678b2144a289f}\label{definitions_8h_ae864cfaefbf5a210e67678b2144a289f}} -\index{definitions.\+h@{definitions.\+h}!C\+A\+M\+\_\+\+S\+T\+O\+P\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON@{C\+A\+M\+\_\+\+S\+T\+O\+P\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON}} -\index{C\+A\+M\+\_\+\+S\+T\+O\+P\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON@{C\+A\+M\+\_\+\+S\+T\+O\+P\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{C\+A\+M\+\_\+\+S\+T\+O\+P\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON}{CAM\_STOP\_COMPUTE\_POSITION}} -{\footnotesize\ttfamily \#define C\+A\+M\+\_\+\+S\+T\+O\+P\+\_\+\+C\+O\+M\+P\+U\+T\+E\+\_\+\+P\+O\+S\+I\+T\+I\+ON~\textquotesingle{}s\textquotesingle{}} - - - -Definition at line 60 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a1b18773c1ce9068c4d38c2cbd2900263}\label{definitions_8h_a1b18773c1ce9068c4d38c2cbd2900263}} -\index{definitions.\+h@{definitions.\+h}!C\+L\+O\+S\+E\+\_\+\+C\+O\+M\+\_\+\+D\+MB@{C\+L\+O\+S\+E\+\_\+\+C\+O\+M\+\_\+\+D\+MB}} -\index{C\+L\+O\+S\+E\+\_\+\+C\+O\+M\+\_\+\+D\+MB@{C\+L\+O\+S\+E\+\_\+\+C\+O\+M\+\_\+\+D\+MB}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{C\+L\+O\+S\+E\+\_\+\+C\+O\+M\+\_\+\+D\+MB}{CLOSE\_COM\_DMB}} -{\footnotesize\ttfamily \#define C\+L\+O\+S\+E\+\_\+\+C\+O\+M\+\_\+\+D\+MB~\textquotesingle{}C\textquotesingle{}} - - - -Definition at line 31 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ab34c46794a9de6746a96752668c73754}\label{definitions_8h_ab34c46794a9de6746a96752668c73754}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+H\+I\+GH@{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+H\+I\+GH}} -\index{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+H\+I\+GH@{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+H\+I\+GH}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+H\+I\+GH}{DMB\_BAT\_HIGH}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+H\+I\+GH~2} - - - -Definition at line 64 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a66c0c4960c1e81c8da8c8e1d4a202352}\label{definitions_8h_a66c0c4960c1e81c8da8c8e1d4a202352}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+L\+OW@{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+L\+OW}} -\index{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+L\+OW@{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+L\+OW}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+L\+OW}{DMB\_BAT\_LOW}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+L\+OW~0} - - - -Definition at line 62 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_aea6ef1c13db1a8a4a29b065d0c3f73e4}\label{definitions_8h_aea6ef1c13db1a8a4a29b065d0c3f73e4}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+M\+E\+D\+I\+UM@{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+M\+E\+D\+I\+UM}} -\index{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+M\+E\+D\+I\+UM@{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+M\+E\+D\+I\+UM}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+M\+E\+D\+I\+UM}{DMB\_BAT\_MEDIUM}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+B\+A\+T\+\_\+\+M\+E\+D\+I\+UM~1} - - - -Definition at line 63 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a3327443cd321f0c356a5d3d74377892b}\label{definitions_8h_a3327443cd321f0c356a5d3d74377892b}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+B\+U\+SY@{D\+M\+B\+\_\+\+B\+U\+SY}} -\index{D\+M\+B\+\_\+\+B\+U\+SY@{D\+M\+B\+\_\+\+B\+U\+SY}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+B\+U\+SY}{DMB\_BUSY}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+B\+U\+SY~1} - - - -Definition at line 66 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a07650c5f6647c5143bac535fdbeb77d5}\label{definitions_8h_a07650c5f6647c5143bac535fdbeb77d5}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+D\+O\+\_\+\+N\+O\+T\+H\+I\+NG@{D\+M\+B\+\_\+\+D\+O\+\_\+\+N\+O\+T\+H\+I\+NG}} -\index{D\+M\+B\+\_\+\+D\+O\+\_\+\+N\+O\+T\+H\+I\+NG@{D\+M\+B\+\_\+\+D\+O\+\_\+\+N\+O\+T\+H\+I\+NG}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+D\+O\+\_\+\+N\+O\+T\+H\+I\+NG}{DMB\_DO\_NOTHING}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+D\+O\+\_\+\+N\+O\+T\+H\+I\+NG~0} - - - -Definition at line 67 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_af1737e8fe4da4e8bc2d5db9d26c42462}\label{definitions_8h_af1737e8fe4da4e8bc2d5db9d26c42462}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+G\+E\+T\+\_\+\+V\+B\+AT@{D\+M\+B\+\_\+\+G\+E\+T\+\_\+\+V\+B\+AT}} -\index{D\+M\+B\+\_\+\+G\+E\+T\+\_\+\+V\+B\+AT@{D\+M\+B\+\_\+\+G\+E\+T\+\_\+\+V\+B\+AT}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+G\+E\+T\+\_\+\+V\+B\+AT}{DMB\_GET\_VBAT}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+G\+E\+T\+\_\+\+V\+B\+AT~\textquotesingle{}v\textquotesingle{}} - - - -Definition at line 38 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a499f41cc19a4459de033687049cbbe71}\label{definitions_8h_a499f41cc19a4459de033687049cbbe71}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+G\+O\+\_\+\+B\+A\+CK@{D\+M\+B\+\_\+\+G\+O\+\_\+\+B\+A\+CK}} -\index{D\+M\+B\+\_\+\+G\+O\+\_\+\+B\+A\+CK@{D\+M\+B\+\_\+\+G\+O\+\_\+\+B\+A\+CK}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+G\+O\+\_\+\+B\+A\+CK}{DMB\_GO\_BACK}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+G\+O\+\_\+\+B\+A\+CK~\textquotesingle{}B\textquotesingle{}} - - - -Definition at line 43 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ae363a29a4961cd8a646a0ca9199bc6cf}\label{definitions_8h_ae363a29a4961cd8a646a0ca9199bc6cf}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+G\+O\+\_\+\+F\+O\+R\+W\+A\+RD@{D\+M\+B\+\_\+\+G\+O\+\_\+\+F\+O\+R\+W\+A\+RD}} -\index{D\+M\+B\+\_\+\+G\+O\+\_\+\+F\+O\+R\+W\+A\+RD@{D\+M\+B\+\_\+\+G\+O\+\_\+\+F\+O\+R\+W\+A\+RD}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+G\+O\+\_\+\+F\+O\+R\+W\+A\+RD}{DMB\_GO\_FORWARD}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+G\+O\+\_\+\+F\+O\+R\+W\+A\+RD~\textquotesingle{}F\textquotesingle{}} - - - -Definition at line 42 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_aefcb838e73a335f1a2a6c914ee2ff752}\label{definitions_8h_aefcb838e73a335f1a2a6c914ee2ff752}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+G\+O\+\_\+\+L\+E\+FT@{D\+M\+B\+\_\+\+G\+O\+\_\+\+L\+E\+FT}} -\index{D\+M\+B\+\_\+\+G\+O\+\_\+\+L\+E\+FT@{D\+M\+B\+\_\+\+G\+O\+\_\+\+L\+E\+FT}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+G\+O\+\_\+\+L\+E\+FT}{DMB\_GO\_LEFT}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+G\+O\+\_\+\+L\+E\+FT~\textquotesingle{}L\textquotesingle{}} - - - -Definition at line 44 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ad681962f7b8cf4797ebd48be0405d1b9}\label{definitions_8h_ad681962f7b8cf4797ebd48be0405d1b9}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+G\+O\+\_\+\+R\+I\+G\+HT@{D\+M\+B\+\_\+\+G\+O\+\_\+\+R\+I\+G\+HT}} -\index{D\+M\+B\+\_\+\+G\+O\+\_\+\+R\+I\+G\+HT@{D\+M\+B\+\_\+\+G\+O\+\_\+\+R\+I\+G\+HT}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+G\+O\+\_\+\+R\+I\+G\+HT}{DMB\_GO\_RIGHT}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+G\+O\+\_\+\+R\+I\+G\+HT~\textquotesingle{}R\textquotesingle{}} - - - -Definition at line 45 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a82b279c49221d3cd3d875d521dfb97b9}\label{definitions_8h_a82b279c49221d3cd3d875d521dfb97b9}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+I\+D\+LE@{D\+M\+B\+\_\+\+I\+D\+LE}} -\index{D\+M\+B\+\_\+\+I\+D\+LE@{D\+M\+B\+\_\+\+I\+D\+LE}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+I\+D\+LE}{DMB\_IDLE}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+I\+D\+LE~\textquotesingle{}r\textquotesingle{}} - - - -Definition at line 34 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ad58c241121e685f26a291aa4bd5f9c80}\label{definitions_8h_ad58c241121e685f26a291aa4bd5f9c80}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+I\+S\+\_\+\+B\+U\+SY@{D\+M\+B\+\_\+\+I\+S\+\_\+\+B\+U\+SY}} -\index{D\+M\+B\+\_\+\+I\+S\+\_\+\+B\+U\+SY@{D\+M\+B\+\_\+\+I\+S\+\_\+\+B\+U\+SY}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+I\+S\+\_\+\+B\+U\+SY}{DMB\_IS\_BUSY}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+I\+S\+\_\+\+B\+U\+SY~\textquotesingle{}b\textquotesingle{}} - - - -Definition at line 39 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ac48dee90eb71d036d001321674abbb8b}\label{definitions_8h_ac48dee90eb71d036d001321674abbb8b}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+M\+O\+VE@{D\+M\+B\+\_\+\+M\+O\+VE}} -\index{D\+M\+B\+\_\+\+M\+O\+VE@{D\+M\+B\+\_\+\+M\+O\+VE}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+M\+O\+VE}{DMB\_MOVE}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+M\+O\+VE~\textquotesingle{}M\textquotesingle{}} - - - -Definition at line 40 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_acf7d51360dcb103fc57604725ec2816d}\label{definitions_8h_acf7d51360dcb103fc57604725ec2816d}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+P\+I\+NG@{D\+M\+B\+\_\+\+P\+I\+NG}} -\index{D\+M\+B\+\_\+\+P\+I\+NG@{D\+M\+B\+\_\+\+P\+I\+NG}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+P\+I\+NG}{DMB\_PING}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+P\+I\+NG~\textquotesingle{}p\textquotesingle{}} - - - -Definition at line 33 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a2ca219902014ffb39aab27cca08a948f}\label{definitions_8h_a2ca219902014ffb39aab27cca08a948f}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+R\+E\+L\+O\+A\+D\+\_\+\+WD@{D\+M\+B\+\_\+\+R\+E\+L\+O\+A\+D\+\_\+\+WD}} -\index{D\+M\+B\+\_\+\+R\+E\+L\+O\+A\+D\+\_\+\+WD@{D\+M\+B\+\_\+\+R\+E\+L\+O\+A\+D\+\_\+\+WD}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+R\+E\+L\+O\+A\+D\+\_\+\+WD}{DMB\_RELOAD\_WD}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+R\+E\+L\+O\+A\+D\+\_\+\+WD~\textquotesingle{}w\textquotesingle{}} - - - -Definition at line 37 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_adee1628bbc796ba55f4a349895f4e0fa}\label{definitions_8h_adee1628bbc796ba55f4a349895f4e0fa}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+\_\+\+WD@{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+\_\+\+WD}} -\index{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+\_\+\+WD@{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+\_\+\+WD}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+\_\+\+WD}{DMB\_START\_WITH\_WD}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+\_\+\+WD~\textquotesingle{}W\textquotesingle{}} - - - -Definition at line 36 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a5ebbd37042a6244b4f9d473ae7132780}\label{definitions_8h_a5ebbd37042a6244b4f9d473ae7132780}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+O\+U\+T\+\_\+\+WD@{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+O\+U\+T\+\_\+\+WD}} -\index{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+O\+U\+T\+\_\+\+WD@{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+O\+U\+T\+\_\+\+WD}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+O\+U\+T\+\_\+\+WD}{DMB\_START\_WITHOUT\_WD}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+S\+T\+A\+R\+T\+\_\+\+W\+I\+T\+H\+O\+U\+T\+\_\+\+WD~\textquotesingle{}u\textquotesingle{}} - - - -Definition at line 35 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a7308179907a0a2989c162865e7a7979a}\label{definitions_8h_a7308179907a0a2989c162865e7a7979a}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+S\+T\+O\+P\+\_\+\+M\+O\+VE@{D\+M\+B\+\_\+\+S\+T\+O\+P\+\_\+\+M\+O\+VE}} -\index{D\+M\+B\+\_\+\+S\+T\+O\+P\+\_\+\+M\+O\+VE@{D\+M\+B\+\_\+\+S\+T\+O\+P\+\_\+\+M\+O\+VE}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+S\+T\+O\+P\+\_\+\+M\+O\+VE}{DMB\_STOP\_MOVE}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+S\+T\+O\+P\+\_\+\+M\+O\+VE~\textquotesingle{}S\textquotesingle{}} - - - -Definition at line 46 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ac6c5492c8100e73f8d30ed36072684db}\label{definitions_8h_ac6c5492c8100e73f8d30ed36072684db}} -\index{definitions.\+h@{definitions.\+h}!D\+M\+B\+\_\+\+T\+U\+RN@{D\+M\+B\+\_\+\+T\+U\+RN}} -\index{D\+M\+B\+\_\+\+T\+U\+RN@{D\+M\+B\+\_\+\+T\+U\+RN}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{D\+M\+B\+\_\+\+T\+U\+RN}{DMB\_TURN}} -{\footnotesize\ttfamily \#define D\+M\+B\+\_\+\+T\+U\+RN~\textquotesingle{}T\textquotesingle{}} - - - -Definition at line 41 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_aac798eaf6994ddcadd8a38ad8aba234f}\label{definitions_8h_aac798eaf6994ddcadd8a38ad8aba234f}} -\index{definitions.\+h@{definitions.\+h}!O\+P\+E\+N\+\_\+\+C\+O\+M\+\_\+\+D\+MB@{O\+P\+E\+N\+\_\+\+C\+O\+M\+\_\+\+D\+MB}} -\index{O\+P\+E\+N\+\_\+\+C\+O\+M\+\_\+\+D\+MB@{O\+P\+E\+N\+\_\+\+C\+O\+M\+\_\+\+D\+MB}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{O\+P\+E\+N\+\_\+\+C\+O\+M\+\_\+\+D\+MB}{OPEN\_COM\_DMB}} -{\footnotesize\ttfamily \#define O\+P\+E\+N\+\_\+\+C\+O\+M\+\_\+\+D\+MB~\textquotesingle{}o\textquotesingle{}} - - - -Definition at line 30 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_af1118b8a83d446b4965347bba126a488}\label{definitions_8h_af1118b8a83d446b4965347bba126a488}} -\index{definitions.\+h@{definitions.\+h}!R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+C\+K\+S\+UM@{R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+C\+K\+S\+UM}} -\index{R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+C\+K\+S\+UM@{R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+C\+K\+S\+UM}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+C\+K\+S\+UM}{ROBOT\_CHECKSUM}} -{\footnotesize\ttfamily \#define R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+C\+K\+S\+UM~-\/4} - - - -Definition at line 51 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a4aefbbdd5d35999aa0575ab7183148d4}\label{definitions_8h_a4aefbbdd5d35999aa0575ab7183148d4}} -\index{definitions.\+h@{definitions.\+h}!R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR@{R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR}} -\index{R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR@{R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR}{ROBOT\_ERROR}} -{\footnotesize\ttfamily \#define R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR~-\/1} - - - -Definition at line 50 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_ad7b2f95c0b423fb9784acb897b910c36}\label{definitions_8h_ad7b2f95c0b423fb9784acb897b910c36}} -\index{definitions.\+h@{definitions.\+h}!R\+O\+B\+O\+T\+\_\+\+OK@{R\+O\+B\+O\+T\+\_\+\+OK}} -\index{R\+O\+B\+O\+T\+\_\+\+OK@{R\+O\+B\+O\+T\+\_\+\+OK}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{R\+O\+B\+O\+T\+\_\+\+OK}{ROBOT\_OK}} -{\footnotesize\ttfamily \#define R\+O\+B\+O\+T\+\_\+\+OK~0} - - - -Definition at line 52 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a624686d3af63394ee02f0a197967d44a}\label{definitions_8h_a624686d3af63394ee02f0a197967d44a}} -\index{definitions.\+h@{definitions.\+h}!R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT@{R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT}} -\index{R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT@{R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT}{ROBOT\_TIMED\_OUT}} -{\footnotesize\ttfamily \#define R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT~-\/3} - - - -Definition at line 48 of file definitions.\+h. - -\mbox{\Hypertarget{definitions_8h_a70a2d5db14b900843364adb7cfe53ac8}\label{definitions_8h_a70a2d5db14b900843364adb7cfe53ac8}} -\index{definitions.\+h@{definitions.\+h}!R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+N\+\_\+\+C\+MD@{R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+N\+\_\+\+C\+MD}} -\index{R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+N\+\_\+\+C\+MD@{R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+N\+\_\+\+C\+MD}!definitions.\+h@{definitions.\+h}} -\subsubsection{\texorpdfstring{R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+N\+\_\+\+C\+MD}{ROBOT\_UKNOWN\_CMD}} -{\footnotesize\ttfamily \#define R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+N\+\_\+\+C\+MD~-\/2} - - - -Definition at line 49 of file definitions.\+h. - diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h__dep__incl.md5 deleted file mode 100644 index ceaa7c5..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0ff198e66f93f7f3727a8650ff7342c9 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h__dep__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/definitions_8h__dep__incl.pdf deleted file mode 100644 index 1f303a811fc5334a0958e58b8439384a524fc39b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11951 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 y@vwNz)#KkHHGBJqqW>XlA8k3P\labelwidth}{% - \begin{minipage}{\textwidth}% - \setlength{\parindent}{0pt}% - \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% - \end{minipage}% - }{% - \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% - }% -} - -%---------- Commands used by doxygen LaTeX output generator ---------- - -% Used by
 ... 
-\newenvironment{DoxyPre}{% - \small% - \begin{alltt}% -}{% - \end{alltt}% - \normalsize% -} - -% Used by @code ... @endcode -\newenvironment{DoxyCode}{% - \par% - \scriptsize% - \begin{alltt}% -}{% - \end{alltt}% - \normalsize% -} - -% Used by @example, @include, @includelineno and @dontinclude -\newenvironment{DoxyCodeInclude}{% - \DoxyCode% -}{% - \endDoxyCode% -} - -% Used by @verbatim ... @endverbatim -\newenvironment{DoxyVerb}{% - \footnotesize% - \verbatim% -}{% - \endverbatim% - \normalsize% -} - -% Used by @verbinclude -\newenvironment{DoxyVerbInclude}{% - \DoxyVerb% -}{% - \endDoxyVerb% -} - -% Used by numbered lists (using '-#' or
    ...
) -\newenvironment{DoxyEnumerate}{% - \enumerate% -}{% - \endenumerate% -} - -% Used by bullet lists (using '-', @li, @arg, or
    ...
) -\newenvironment{DoxyItemize}{% - \itemize% -}{% - \enditemize% -} - -% Used by description lists (using
...
) -\newenvironment{DoxyDescription}{% - \description% -}{% - \enddescription% -} - -% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc -% (only if caption is specified) -\newenvironment{DoxyImage}{% - \begin{figure}[H]% - \begin{center}% -}{% - \end{center}% - \end{figure}% -} - -% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc -% (only if no caption is specified) -\newenvironment{DoxyImageNoCaption}{% - \begin{center}% -}{% - \end{center}% -} - -% Used by @attention -\newenvironment{DoxyAttention}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @author and @authors -\newenvironment{DoxyAuthor}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @date -\newenvironment{DoxyDate}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @invariant -\newenvironment{DoxyInvariant}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @note -\newenvironment{DoxyNote}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @post -\newenvironment{DoxyPostcond}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @pre -\newenvironment{DoxyPrecond}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @copyright -\newenvironment{DoxyCopyright}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @remark -\newenvironment{DoxyRemark}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @return and @returns -\newenvironment{DoxyReturn}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @since -\newenvironment{DoxySince}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @see -\newenvironment{DoxySeeAlso}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @version -\newenvironment{DoxyVersion}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @warning -\newenvironment{DoxyWarning}[1]{% - \begin{DoxyDesc}{#1}% -}{% - \end{DoxyDesc}% -} - -% Used by @internal -\newenvironment{DoxyInternal}[1]{% - \paragraph*{#1}% -}{% -} - -% Used by @par and @paragraph -\newenvironment{DoxyParagraph}[1]{% - \begin{list}{}{% - \settowidth{\labelwidth}{40pt}% - \setlength{\leftmargin}{\labelwidth}% - \setlength{\parsep}{0pt}% - \setlength{\itemsep}{-4pt}% - \renewcommand{\makelabel}{\entrylabel}% - }% - \item[#1]% -}{% - \end{list}% -} - -% Used by parameter lists -\newenvironment{DoxyParams}[2][]{% - \tabulinesep=1mm% - \par% - \ifthenelse{\equal{#1}{}}% - {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description - {\ifthenelse{\equal{#1}{1}}% - {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc - {\begin{longtabu} spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc - } - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% - \hline% - \endfirsthead% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% - \hline% - \endhead% -}{% - \end{longtabu}% - \vspace{6pt}% -} - -% Used for fields of simple structs -\newenvironment{DoxyFields}[1]{% - \tabulinesep=1mm% - \par% - \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% - \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endfirsthead% - \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endhead% -}{% - \end{longtabu}% - \vspace{6pt}% -} - -% Used for fields simple class style enums -\newenvironment{DoxyEnumFields}[1]{% - \tabulinesep=1mm% - \par% - \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endfirsthead% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endhead% -}{% - \end{longtabu}% - \vspace{6pt}% -} - -% Used for parameters within a detailed function description -\newenvironment{DoxyParamCaption}{% - \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% -}{% -} - -% Used by return value lists -\newenvironment{DoxyRetVals}[1]{% - \tabulinesep=1mm% - \par% - \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endfirsthead% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endhead% -}{% - \end{longtabu}% - \vspace{6pt}% -} - -% Used by exception lists -\newenvironment{DoxyExceptions}[1]{% - \tabulinesep=1mm% - \par% - \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endfirsthead% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endhead% -}{% - \end{longtabu}% - \vspace{6pt}% -} - -% Used by template parameter lists -\newenvironment{DoxyTemplParams}[1]{% - \tabulinesep=1mm% - \par% - \begin{longtabu} spread 0pt [l]{|X[-1,r]|X[-1,l]|}% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endfirsthead% - \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% - \hline% - \endhead% -}{% - \end{longtabu}% - \vspace{6pt}% -} - -% Used for member lists -\newenvironment{DoxyCompactItemize}{% - \begin{itemize}% - \setlength{\itemsep}{-3pt}% - \setlength{\parsep}{0pt}% - \setlength{\topsep}{0pt}% - \setlength{\partopsep}{0pt}% -}{% - \end{itemize}% -} - -% Used for member descriptions -\newenvironment{DoxyCompactList}{% - \begin{list}{}{% - \setlength{\leftmargin}{0.5cm}% - \setlength{\itemsep}{0pt}% - \setlength{\parsep}{0pt}% - \setlength{\topsep}{0pt}% - \renewcommand{\makelabel}{\hfill}% - }% -}{% - \end{list}% -} - -% Used for reference lists (@bug, @deprecated, @todo, etc.) -\newenvironment{DoxyRefList}{% - \begin{list}{}{% - \setlength{\labelwidth}{10pt}% - \setlength{\leftmargin}{\labelwidth}% - \addtolength{\leftmargin}{\labelsep}% - \renewcommand{\makelabel}{\xreflabel}% - }% -}{% - \end{list}% -} - -% Used by @bug, @deprecated, @todo, etc. -\newenvironment{DoxyRefDesc}[1]{% - \begin{list}{}{% - \renewcommand\makelabel[1]{\textbf{##1}}% - \settowidth\labelwidth{\makelabel{#1}}% - \setlength\leftmargin{\labelwidth+\labelsep}% - }% -}{% - \end{list}% -} - -% Used by parameter lists and simple sections -\newenvironment{Desc} -{\begin{list}{}{% - \settowidth{\labelwidth}{20pt}% - \setlength{\parsep}{0pt}% - \setlength{\itemsep}{0pt}% - \setlength{\leftmargin}{\labelwidth+\labelsep}% - \renewcommand{\makelabel}{\entrylabel}% - } -}{% - \end{list}% -} - -% Used by tables -\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% -\newenvironment{TabularC}[1]% -{\tabulinesep=1mm -\begin{longtabu} spread 0pt [c]{*#1{|X[-1]}|}}% -{\end{longtabu}\par}% - -\newenvironment{TabularNC}[1]% -{\begin{tabu} spread 0pt [l]{*#1{|X[-1]}|}}% -{\end{tabu}\par}% - -% Used for member group headers -\newenvironment{Indent}{% - \begin{list}{}{% - \setlength{\leftmargin}{0.5cm}% - }% - \item[]\ignorespaces% -}{% - \unskip% - \end{list}% -} - -% Used when hyperlinks are turned off -\newcommand{\doxyref}[3]{% - \textbf{#1} (\textnormal{#2}\,\pageref{#3})% -} - -% Used to link to a table when hyperlinks are turned on -\newcommand{\doxytablelink}[2]{% - \ref{#1}% -} - -% Used to link to a table when hyperlinks are turned off -\newcommand{\doxytableref}[3]{% - \ref{#3}% -} - -% Used by @addindex -\newcommand{\lcurly}{\{} -\newcommand{\rcurly}{\}} - -% Colors used for syntax highlighting -\definecolor{comment}{rgb}{0.5,0.0,0.0} -\definecolor{keyword}{rgb}{0.0,0.5,0.0} -\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} -\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} -\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} -\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} -\definecolor{charliteral}{rgb}{0.0,0.5,0.5} -\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} -\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} -\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} -\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} - -% Color used for table heading -\newcommand{\tableheadbgcolor}{lightgray}% - -% Version of hypertarget with correct landing location -\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} - -% Define caption that is also suitable in a table -\makeatletter -\def\doxyfigcaption{% -\refstepcounter{figure}% -\@dblarg{\@caption{figure}}} -\makeatother diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/files.tex b/software/raspberry/superviseur-robot/lib/doc/latex/files.tex deleted file mode 100644 index 1ea8262..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/files.tex +++ /dev/null @@ -1,9 +0,0 @@ -\section{File List} -Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList} -\item\contentsline{section}{\hyperlink{definitions_8h}{definitions.\+h} \\*Various constants used in destjil project }{\pageref{definitions_8h}}{} -\item\contentsline{section}{\hyperlink{image_8h}{image.\+h} \\*Functions for image treatment }{\pageref{image_8h}}{} -\item\contentsline{section}{\hyperlink{message_8h}{message.\+h} \\*Functions for sending message to monitor }{\pageref{message_8h}}{} -\item\contentsline{section}{\hyperlink{monitor_8h}{monitor.\+h} \\*Library for sending message to monitor or receiving message }{\pageref{monitor_8h}}{} -\item\contentsline{section}{\hyperlink{robot_8h}{robot.\+h} \\*Fonctions for communicating with robot }{\pageref{robot_8h}}{} -\item\contentsline{section}{\hyperlink{server_8h}{server.\+h} \\*Library for opening a T\+CP server, receiving data and sending message to monitor }{\pageref{server_8h}}{} -\end{DoxyCompactList} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp.tex b/software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp.tex deleted file mode 100644 index 7f053b0..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp.tex +++ /dev/null @@ -1,283 +0,0 @@ -\hypertarget{image_8cpp}{}\section{src/image.cpp File Reference} -\label{image_8cpp}\index{src/image.\+cpp@{src/image.\+cpp}} - - -Fonctions de traitement d\textquotesingle{}image utilisable pour la détection du robot. - - -{\ttfamily \#include \char`\"{}image.\+h\char`\"{}}\newline -{\ttfamily \#include $<$iostream$>$}\newline -Include dependency graph for image.\+cpp\+: -\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=350pt]{image_8cpp__incl} -\end{center} -\end{figure} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -float \hyperlink{image_8cpp_afe015c86402c7d09d9d7b28587c7fd1b}{calcul\+Angle} (\hyperlink{struct_position}{Position} $\ast$position\+Robot) -\item -int \hyperlink{image_8cpp_a41fa265b5f57fcd2a13e726880297d12}{crop\+Arena} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Output, \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$Arene\+Input) -\item -float \hyperlink{image_8cpp_a73f53d1da08f1f8123da89585d16c7ef}{euclidean\+Dist} (Point \&p, Point \&q) -\item -void \hyperlink{image_8cpp_a5ffd032a466af45a505fb46252194bbf}{draw\+\_\+arena} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Output, \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$mon\+Arene) -\begin{DoxyCompactList}\small\item\em Dessine le plus petit rectangle contenant l\textquotesingle{}arène. \end{DoxyCompactList}\item -int \hyperlink{image_8cpp_aca0662ab31eac7fdb2d64fecc52ff1da}{open\+\_\+camera} (\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$camera) -\begin{DoxyCompactList}\small\item\em Ouvre une camera. \end{DoxyCompactList}\item -void \hyperlink{image_8cpp_a864afddf57678b37b99d9eca70405d63}{get\+\_\+image} (\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$camera, \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$mon\+Image, const char $\ast$fichier) -\begin{DoxyCompactList}\small\item\em Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image. \end{DoxyCompactList}\item -void \hyperlink{image_8cpp_a19eac11a04cb4b86fd32e6a36445ad5d}{close\+\_\+camera} (\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$camera) -\begin{DoxyCompactList}\small\item\em Ferme la camera passé en paramètre. \end{DoxyCompactList}\item -int \hyperlink{image_8cpp_acad45df4061a55f17be0db97c1406249}{detect\+\_\+arena} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$mon\+Image, \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$rectangle) -\begin{DoxyCompactList}\small\item\em Détecte une arène dans une image fournis en paramètre. \end{DoxyCompactList}\item -void \hyperlink{image_8cpp_a909ca7577f0ac2e4bd0ea21291690dce}{compress\+\_\+image} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{image_8h_a9ac2855e21920c676a108df386ff9415}{Jpg} $\ast$image\+Compress) -\begin{DoxyCompactList}\small\item\em Détecte la position d\textquotesingle{}un robot. \end{DoxyCompactList}\item -int \hyperlink{image_8cpp_ac813f76084a0d9d252fb5c01830ab7df}{detect\+\_\+position} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{struct_position}{Position} $\ast$pos\+Triangle, \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$mon\+Arene) -\begin{DoxyCompactList}\small\item\em Détecte la position d\textquotesingle{}un robot. \end{DoxyCompactList}\item -void \hyperlink{image_8cpp_a869c3946d4a414b8730ca4f91fbd9556}{draw\+\_\+position} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Output, \hyperlink{struct_position}{Position} $\ast$position\+Robot) -\begin{DoxyCompactList}\small\item\em Dessine sur une image en entrée la position d\textquotesingle{}un robot et sa direction. \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Fonctions de traitement d\textquotesingle{}image utilisable pour la détection du robot. - -\begin{DoxyAuthor}{Author} -L.\+Senaneuch -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} -Ce fichier utilise la libraire open\+C\+V2 pour faciliter le traitement d\textquotesingle{}image dans le projet Destijl. Il permet de faciliter la détection de l\textquotesingle{}arène et la détection du robot. /!\textbackslash{} Attention Bien que celui-\/ci soit un .cpp la structure du code n\textquotesingle{}est pas sous forme d\textquotesingle{}objet. - -\subsection{Function Documentation} -\mbox{\Hypertarget{image_8cpp_afe015c86402c7d09d9d7b28587c7fd1b}\label{image_8cpp_afe015c86402c7d09d9d7b28587c7fd1b}} -\index{image.\+cpp@{image.\+cpp}!calcul\+Angle@{calcul\+Angle}} -\index{calcul\+Angle@{calcul\+Angle}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{calcul\+Angle()}{calculAngle()}} -{\footnotesize\ttfamily float calcul\+Angle (\begin{DoxyParamCaption}\item[{\hyperlink{struct_position}{Position} $\ast$}]{position\+Robot }\end{DoxyParamCaption})} - - - -Definition at line 253 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_a19eac11a04cb4b86fd32e6a36445ad5d}\label{image_8cpp_a19eac11a04cb4b86fd32e6a36445ad5d}} -\index{image.\+cpp@{image.\+cpp}!close\+\_\+camera@{close\+\_\+camera}} -\index{close\+\_\+camera@{close\+\_\+camera}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{close\+\_\+camera()}{close\_camera()}} -{\footnotesize\ttfamily void close\+\_\+camera (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$}]{camera }\end{DoxyParamCaption})} - - - -Ferme la camera passé en paramètre. - - -\begin{DoxyParams}{Parameters} -{\em $\ast$\+Camera} & Pointeur sur la camera à fermer \\ -\hline -\end{DoxyParams} - - -Definition at line 112 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_a909ca7577f0ac2e4bd0ea21291690dce}\label{image_8cpp_a909ca7577f0ac2e4bd0ea21291690dce}} -\index{image.\+cpp@{image.\+cpp}!compress\+\_\+image@{compress\+\_\+image}} -\index{compress\+\_\+image@{compress\+\_\+image}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{compress\+\_\+image()}{compress\_image()}} -{\footnotesize\ttfamily void compress\+\_\+image (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{image_8h_a9ac2855e21920c676a108df386ff9415}{Jpg} $\ast$}]{image\+Compress }\end{DoxyParamCaption})} - - - -Détecte la position d\textquotesingle{}un robot. - -Détecte la position de triangles blanc sur une image /a img\+Input passé en paramètre d\textquotesingle{}entrer. - - -\begin{DoxyParams}{Parameters} -{\em $\ast$img\+Input} & Pointeur sur l\textquotesingle{}image à sauvegarder en mémoire sous format jpg. \\ -\hline -{\em $\ast$image\+Compress} & Pointeur sur une image .jpg. \\ -\hline -\end{DoxyParams} - - -Definition at line 164 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_a41fa265b5f57fcd2a13e726880297d12}\label{image_8cpp_a41fa265b5f57fcd2a13e726880297d12}} -\index{image.\+cpp@{image.\+cpp}!crop\+Arena@{crop\+Arena}} -\index{crop\+Arena@{crop\+Arena}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{crop\+Arena()}{cropArena()}} -{\footnotesize\ttfamily int crop\+Arena (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Output, }\item[{\hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$}]{Arene\+Input }\end{DoxyParamCaption})} - - - -Definition at line 150 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_acad45df4061a55f17be0db97c1406249}\label{image_8cpp_acad45df4061a55f17be0db97c1406249}} -\index{image.\+cpp@{image.\+cpp}!detect\+\_\+arena@{detect\+\_\+arena}} -\index{detect\+\_\+arena@{detect\+\_\+arena}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{detect\+\_\+arena()}{detect\_arena()}} -{\footnotesize\ttfamily int detect\+\_\+arena (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{mon\+Image, }\item[{\hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$}]{rectangle }\end{DoxyParamCaption})} - - - -Détecte une arène dans une image fournis en paramètre. - - -\begin{DoxyParams}{Parameters} -{\em $\ast$mon\+Image} & Pointeur sur l\textquotesingle{}image d\textquotesingle{}entrée \\ -\hline -{\em $\ast$rectangle} & Pointeur sur les coordonnées du rectangles trouvé. \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne -\/1 si aucune arène n\textquotesingle{}est détectée. Sinon retourne 0 -\end{DoxyReturn} - - -Definition at line 126 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_ac813f76084a0d9d252fb5c01830ab7df}\label{image_8cpp_ac813f76084a0d9d252fb5c01830ab7df}} -\index{image.\+cpp@{image.\+cpp}!detect\+\_\+position@{detect\+\_\+position}} -\index{detect\+\_\+position@{detect\+\_\+position}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{detect\+\_\+position()}{detect\_position()}} -{\footnotesize\ttfamily int detect\+\_\+position (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{struct_position}{Position} $\ast$}]{pos\+Triangle, }\item[{\hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$}]{mon\+Arene = {\ttfamily NULL} }\end{DoxyParamCaption})} - - - -Détecte la position d\textquotesingle{}un robot. - -Détecte la position de triangles blanc sur une image /a img\+Input passé en paramètre d\textquotesingle{}entrer. - - -\begin{DoxyParams}{Parameters} -{\em $\ast$img\+Input} & Pointeur sur l\textquotesingle{}image sur laquelle chercher la position du des robots. \\ -\hline -{\em $\ast$pos\+Triangle} & Pointeur sur un tableau de position ou seront stocké les positions des triangles détectés. \\ -\hline -{\em $\ast$mon\+Arene} & Pointeur de type Arène si nécessaire d\textquotesingle{}affiner la recherche (optionnel) \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Le nombre de triangles détectés. -\end{DoxyReturn} - - -Definition at line 170 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_a5ffd032a466af45a505fb46252194bbf}\label{image_8cpp_a5ffd032a466af45a505fb46252194bbf}} -\index{image.\+cpp@{image.\+cpp}!draw\+\_\+arena@{draw\+\_\+arena}} -\index{draw\+\_\+arena@{draw\+\_\+arena}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{draw\+\_\+arena()}{draw\_arena()}} -{\footnotesize\ttfamily void draw\+\_\+arena (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Output, }\item[{\hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$}]{mon\+Arene }\end{DoxyParamCaption})} - - - -Dessine le plus petit rectangle contenant l\textquotesingle{}arène. - - -\begin{DoxyParams}{Parameters} -{\em $\ast$img\+Input} & Pointeur sur l\textquotesingle{}image d\textquotesingle{}entrée. \\ -\hline -{\em $\ast$img\+Output} & Pointeur sur l\textquotesingle{}image de sortie (image d\textquotesingle{}entrée + arène marquée) \\ -\hline -{\em $\ast$mon\+Arene} & Pointeur de type Arène contenant les information à dessiner \\ -\hline -\end{DoxyParams} - - -Definition at line 51 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_a869c3946d4a414b8730ca4f91fbd9556}\label{image_8cpp_a869c3946d4a414b8730ca4f91fbd9556}} -\index{image.\+cpp@{image.\+cpp}!draw\+\_\+position@{draw\+\_\+position}} -\index{draw\+\_\+position@{draw\+\_\+position}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{draw\+\_\+position()}{draw\_position()}} -{\footnotesize\ttfamily void draw\+\_\+position (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Output, }\item[{\hyperlink{struct_position}{Position} $\ast$}]{position\+Robot }\end{DoxyParamCaption})} - - - -Dessine sur une image en entrée la position d\textquotesingle{}un robot et sa direction. - -Sauvegarde l\textquotesingle{}image des coordonnées passées par position\+Robot superposée à l\textquotesingle{}image d\textquotesingle{}entrée sur img\+Output. - - -\begin{DoxyParams}{Parameters} -{\em $\ast$img\+Input} & Pointeur sur l\textquotesingle{}image d\textquotesingle{}entrée \\ -\hline -{\em $\ast$img\+Output} & Pointeur sur l\textquotesingle{}image de sortie ( image d\textquotesingle{}entrée + dessin de la position) \\ -\hline -{\em $\ast$position\+Robot} & Pointeur sur la structure position d\textquotesingle{}un robot. \\ -\hline -\end{DoxyParams} - - -Definition at line 244 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_a73f53d1da08f1f8123da89585d16c7ef}\label{image_8cpp_a73f53d1da08f1f8123da89585d16c7ef}} -\index{image.\+cpp@{image.\+cpp}!euclidean\+Dist@{euclidean\+Dist}} -\index{euclidean\+Dist@{euclidean\+Dist}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{euclidean\+Dist()}{euclideanDist()}} -{\footnotesize\ttfamily float euclidean\+Dist (\begin{DoxyParamCaption}\item[{Point \&}]{p, }\item[{Point \&}]{q }\end{DoxyParamCaption})} - - - -Definition at line 159 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_a864afddf57678b37b99d9eca70405d63}\label{image_8cpp_a864afddf57678b37b99d9eca70405d63}} -\index{image.\+cpp@{image.\+cpp}!get\+\_\+image@{get\+\_\+image}} -\index{get\+\_\+image@{get\+\_\+image}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{get\+\_\+image()}{get\_image()}} -{\footnotesize\ttfamily void get\+\_\+image (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$}]{camera, }\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{mon\+Image, }\item[{const char $\ast$}]{fichier = {\ttfamily NULL} }\end{DoxyParamCaption})} - - - -Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image. - -La camera doit préalablement être ouverte via {\itshape open\+Camera}(...) - - -\begin{DoxyParams}{Parameters} -{\em $\ast$\+Camera} & Pointeur sur la camera passée en entrée. \\ -\hline -{\em $\ast$mon\+Image} & Pointeur sur une image capturée. \\ -\hline -{\em $\ast$fichier} & chemin du fichier d\textquotesingle{}image \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne -\/1 si une erreur survient. -\end{DoxyReturn} - - -Definition at line 93 of file image.\+cpp. - -\mbox{\Hypertarget{image_8cpp_aca0662ab31eac7fdb2d64fecc52ff1da}\label{image_8cpp_aca0662ab31eac7fdb2d64fecc52ff1da}} -\index{image.\+cpp@{image.\+cpp}!open\+\_\+camera@{open\+\_\+camera}} -\index{open\+\_\+camera@{open\+\_\+camera}!image.\+cpp@{image.\+cpp}} -\subsubsection{\texorpdfstring{open\+\_\+camera()}{open\_camera()}} -{\footnotesize\ttfamily int open\+\_\+camera (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$}]{camera }\end{DoxyParamCaption})} - - - -Ouvre une camera. - -Met à jour le descripteur de fichier passé en paramètre pour correspondre à la camera ouverte - - -\begin{DoxyParams}{Parameters} -{\em $\ast$\+Camera} & Pointeur d\textquotesingle{}un file descriptor d\textquotesingle{}une camera ouverte \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -retourne 0 si la camera a été ouverte correctement et -\/1 si une erreur survient. -\end{DoxyReturn} - - -Definition at line 58 of file image.\+cpp. - diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp__incl.md5 deleted file mode 100644 index 9ae2540..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1a9e436ff61a4ce15dc9d75b9819db92 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/image_8cpp__incl.pdf deleted file mode 100644 index 72320a5f36c1a58ec7a8ace579b8905bf8e393a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13690 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 ZS7Cs@ox>mR0-2ean32fHMC3$~{vR*e4ZQ#W diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/image_8h.tex b/software/raspberry/superviseur-robot/lib/doc/latex/image_8h.tex deleted file mode 100644 index e3c9431..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/image_8h.tex +++ /dev/null @@ -1,312 +0,0 @@ -\hypertarget{image_8h}{}\section{image.\+h File Reference} -\label{image_8h}\index{image.\+h@{image.\+h}} - - -Functions for image treatment. - - -{\ttfamily \#include $<$raspicam/raspicam\+\_\+cv.\+h$>$}\newline -{\ttfamily \#include \char`\"{}opencv2/imgproc/imgproc.\+hpp\char`\"{}}\newline -{\ttfamily \#include $<$unistd.\+h$>$}\newline -{\ttfamily \#include $<$math.\+h$>$}\newline -Include dependency graph for image.\+h\+:\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=350pt]{image_8h__incl} -\end{center} -\end{figure} -This graph shows which files directly or indirectly include this file\+:\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=208pt]{image_8h__dep__incl} -\end{center} -\end{figure} -\subsection*{Classes} -\begin{DoxyCompactItemize} -\item -struct \hyperlink{struct_position}{Position} -\end{DoxyCompactItemize} -\subsection*{Macros} -\begin{DoxyCompactItemize} -\item -\#define \hyperlink{image_8h_a241aeeb764887ae5e3de58b98f04b16d}{W\+I\+D\+TH}~480 -\item -\#define \hyperlink{image_8h_aed89bd71aee8be823e8a20ec4e093c1e}{H\+E\+I\+G\+HT}~360 -\end{DoxyCompactItemize} -\subsection*{Typedefs} -\begin{DoxyCompactItemize} -\item -typedef Mat \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} -\item -typedef Raspi\+Cam\+\_\+\+Cv \hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} -\item -typedef Rect \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} -\item -typedef vector$<$ unsigned char $>$ \hyperlink{image_8h_a9ac2855e21920c676a108df386ff9415}{Jpg} -\end{DoxyCompactItemize} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -int \hyperlink{image_8h_aca0662ab31eac7fdb2d64fecc52ff1da}{open\+\_\+camera} (\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$camera) -\begin{DoxyCompactList}\small\item\em Ouvre une camera. \end{DoxyCompactList}\item -void \hyperlink{image_8h_a19eac11a04cb4b86fd32e6a36445ad5d}{close\+\_\+camera} (\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$camera) -\begin{DoxyCompactList}\small\item\em Ferme la camera passé en paramètre. \end{DoxyCompactList}\item -void \hyperlink{image_8h_ad904f3348c2d44f9c82435c94cd83844}{get\+\_\+image} (\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$camera, \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$mon\+Image, const char $\ast$fichier=N\+U\+LL) -\begin{DoxyCompactList}\small\item\em Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image. \end{DoxyCompactList}\item -int \hyperlink{image_8h_acad45df4061a55f17be0db97c1406249}{detect\+\_\+arena} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$mon\+Image, \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$rectangle) -\begin{DoxyCompactList}\small\item\em Détecte une arène dans une image fournis en paramètre. \end{DoxyCompactList}\item -void \hyperlink{image_8h_a5ffd032a466af45a505fb46252194bbf}{draw\+\_\+arena} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Output, \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$mon\+Arene) -\begin{DoxyCompactList}\small\item\em Dessine le plus petit rectangle contenant l\textquotesingle{}arène. \end{DoxyCompactList}\item -int \hyperlink{image_8h_af9f6e2dd4409486f2f6446d1a8a02c40}{detect\+\_\+position} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{struct_position}{Position} $\ast$pos\+Triangle, \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$mon\+Arene=N\+U\+LL) -\begin{DoxyCompactList}\small\item\em Détecte la position d\textquotesingle{}un robot. \end{DoxyCompactList}\item -void \hyperlink{image_8h_a869c3946d4a414b8730ca4f91fbd9556}{draw\+\_\+position} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Output, \hyperlink{struct_position}{Position} $\ast$position\+Robot) -\begin{DoxyCompactList}\small\item\em Dessine sur une image en entrée la position d\textquotesingle{}un robot et sa direction. \end{DoxyCompactList}\item -void \hyperlink{image_8h_a909ca7577f0ac2e4bd0ea21291690dce}{compress\+\_\+image} (\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$img\+Input, \hyperlink{image_8h_a9ac2855e21920c676a108df386ff9415}{Jpg} $\ast$image\+Compress) -\begin{DoxyCompactList}\small\item\em Détecte la position d\textquotesingle{}un robot. \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Functions for image treatment. - -\begin{DoxyAuthor}{Author} -L.\+Senaneuch -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} -This file use open\+C\+V2 library for picture processing. This allow to detect arena and robot. - -\subsection{Macro Definition Documentation} -\mbox{\Hypertarget{image_8h_aed89bd71aee8be823e8a20ec4e093c1e}\label{image_8h_aed89bd71aee8be823e8a20ec4e093c1e}} -\index{image.\+h@{image.\+h}!H\+E\+I\+G\+HT@{H\+E\+I\+G\+HT}} -\index{H\+E\+I\+G\+HT@{H\+E\+I\+G\+HT}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{H\+E\+I\+G\+HT}{HEIGHT}} -{\footnotesize\ttfamily \#define H\+E\+I\+G\+HT~360} - - - -Definition at line 45 of file image.\+h. - -\mbox{\Hypertarget{image_8h_a241aeeb764887ae5e3de58b98f04b16d}\label{image_8h_a241aeeb764887ae5e3de58b98f04b16d}} -\index{image.\+h@{image.\+h}!W\+I\+D\+TH@{W\+I\+D\+TH}} -\index{W\+I\+D\+TH@{W\+I\+D\+TH}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{W\+I\+D\+TH}{WIDTH}} -{\footnotesize\ttfamily \#define W\+I\+D\+TH~480} - - - -Definition at line 44 of file image.\+h. - - - -\subsection{Typedef Documentation} -\mbox{\Hypertarget{image_8h_aa856a7cb8a1535c9f13096bede6c8586}\label{image_8h_aa856a7cb8a1535c9f13096bede6c8586}} -\index{image.\+h@{image.\+h}!Arene@{Arene}} -\index{Arene@{Arene}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{Arene}{Arene}} -{\footnotesize\ttfamily typedef Rect \hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene}} - - - -Definition at line 66 of file image.\+h. - -\mbox{\Hypertarget{image_8h_a739dda3f6f6ddbab22617837b43a692a}\label{image_8h_a739dda3f6f6ddbab22617837b43a692a}} -\index{image.\+h@{image.\+h}!Camera@{Camera}} -\index{Camera@{Camera}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{Camera}{Camera}} -{\footnotesize\ttfamily typedef Raspi\+Cam\+\_\+\+Cv \hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera}} - - - -Definition at line 58 of file image.\+h. - -\mbox{\Hypertarget{image_8h_a466446fef9c0348568bc6743186d1a38}\label{image_8h_a466446fef9c0348568bc6743186d1a38}} -\index{image.\+h@{image.\+h}!Image@{Image}} -\index{Image@{Image}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{Image}{Image}} -{\footnotesize\ttfamily typedef Mat \hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image}} - - - -Definition at line 55 of file image.\+h. - -\mbox{\Hypertarget{image_8h_a9ac2855e21920c676a108df386ff9415}\label{image_8h_a9ac2855e21920c676a108df386ff9415}} -\index{image.\+h@{image.\+h}!Jpg@{Jpg}} -\index{Jpg@{Jpg}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{Jpg}{Jpg}} -{\footnotesize\ttfamily typedef vector$<$unsigned char$>$ \hyperlink{image_8h_a9ac2855e21920c676a108df386ff9415}{Jpg}} - - - -Definition at line 67 of file image.\+h. - - - -\subsection{Function Documentation} -\mbox{\Hypertarget{image_8h_a19eac11a04cb4b86fd32e6a36445ad5d}\label{image_8h_a19eac11a04cb4b86fd32e6a36445ad5d}} -\index{image.\+h@{image.\+h}!close\+\_\+camera@{close\+\_\+camera}} -\index{close\+\_\+camera@{close\+\_\+camera}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{close\+\_\+camera()}{close\_camera()}} -{\footnotesize\ttfamily void close\+\_\+camera (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$}]{camera }\end{DoxyParamCaption})} - - - -Ferme la camera passé en paramètre. - - -\begin{DoxyParams}{Parameters} -{\em camera} & Pointeur sur la camera à fermer \\ -\hline -\end{DoxyParams} -\mbox{\Hypertarget{image_8h_a909ca7577f0ac2e4bd0ea21291690dce}\label{image_8h_a909ca7577f0ac2e4bd0ea21291690dce}} -\index{image.\+h@{image.\+h}!compress\+\_\+image@{compress\+\_\+image}} -\index{compress\+\_\+image@{compress\+\_\+image}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{compress\+\_\+image()}{compress\_image()}} -{\footnotesize\ttfamily void compress\+\_\+image (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{image_8h_a9ac2855e21920c676a108df386ff9415}{Jpg} $\ast$}]{image\+Compress }\end{DoxyParamCaption})} - - - -Détecte la position d\textquotesingle{}un robot. - -Détecte la position de triangles blanc sur une image /a img\+Input passé en paramètre d\textquotesingle{}entrer. - - -\begin{DoxyParams}{Parameters} -{\em img\+Input} & Pointeur sur l\textquotesingle{}image à sauvegarder en mémoire sous format jpg. \\ -\hline -{\em image\+Compress} & Pointeur sur une image .jpg. \\ -\hline -\end{DoxyParams} -\mbox{\Hypertarget{image_8h_acad45df4061a55f17be0db97c1406249}\label{image_8h_acad45df4061a55f17be0db97c1406249}} -\index{image.\+h@{image.\+h}!detect\+\_\+arena@{detect\+\_\+arena}} -\index{detect\+\_\+arena@{detect\+\_\+arena}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{detect\+\_\+arena()}{detect\_arena()}} -{\footnotesize\ttfamily int detect\+\_\+arena (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{mon\+Image, }\item[{\hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$}]{rectangle }\end{DoxyParamCaption})} - - - -Détecte une arène dans une image fournis en paramètre. - - -\begin{DoxyParams}{Parameters} -{\em mon\+Image} & Pointeur sur l\textquotesingle{}image d\textquotesingle{}entrée \\ -\hline -{\em rectangle} & Pointeur sur les coordonnées du rectangles trouvé. \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne -\/1 si aucune arène n\textquotesingle{}est détectée. Sinon retourne 0 -\end{DoxyReturn} -\mbox{\Hypertarget{image_8h_af9f6e2dd4409486f2f6446d1a8a02c40}\label{image_8h_af9f6e2dd4409486f2f6446d1a8a02c40}} -\index{image.\+h@{image.\+h}!detect\+\_\+position@{detect\+\_\+position}} -\index{detect\+\_\+position@{detect\+\_\+position}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{detect\+\_\+position()}{detect\_position()}} -{\footnotesize\ttfamily int detect\+\_\+position (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{struct_position}{Position} $\ast$}]{pos\+Triangle, }\item[{\hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$}]{mon\+Arene = {\ttfamily NULL} }\end{DoxyParamCaption})} - - - -Détecte la position d\textquotesingle{}un robot. - -Détecte la position de triangles blanc sur une image /a img\+Input passé en paramètre d\textquotesingle{}entrer. - - -\begin{DoxyParams}{Parameters} -{\em img\+Input} & Pointeur sur l\textquotesingle{}image sur laquelle chercher la position du des robots. \\ -\hline -{\em pos\+Triangle} & Pointeur sur un tableau de position ou seront stocké les positions des triangles détectés. \\ -\hline -{\em mon\+Arene} & Pointeur de type Arène si nécessaire d\textquotesingle{}affiner la recherche (optionnel) \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Le nombre de triangles détectés. -\end{DoxyReturn} -\mbox{\Hypertarget{image_8h_a5ffd032a466af45a505fb46252194bbf}\label{image_8h_a5ffd032a466af45a505fb46252194bbf}} -\index{image.\+h@{image.\+h}!draw\+\_\+arena@{draw\+\_\+arena}} -\index{draw\+\_\+arena@{draw\+\_\+arena}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{draw\+\_\+arena()}{draw\_arena()}} -{\footnotesize\ttfamily void draw\+\_\+arena (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Output, }\item[{\hyperlink{image_8h_aa856a7cb8a1535c9f13096bede6c8586}{Arene} $\ast$}]{mon\+Arene }\end{DoxyParamCaption})} - - - -Dessine le plus petit rectangle contenant l\textquotesingle{}arène. - - -\begin{DoxyParams}{Parameters} -{\em img\+Input} & Pointeur sur l\textquotesingle{}image d\textquotesingle{}entrée. \\ -\hline -{\em img\+Output} & Pointeur sur l\textquotesingle{}image de sortie (image d\textquotesingle{}entrée + arène marquée) \\ -\hline -{\em mon\+Arene} & Pointeur de type Arène contenant les information à dessiner \\ -\hline -\end{DoxyParams} -\mbox{\Hypertarget{image_8h_a869c3946d4a414b8730ca4f91fbd9556}\label{image_8h_a869c3946d4a414b8730ca4f91fbd9556}} -\index{image.\+h@{image.\+h}!draw\+\_\+position@{draw\+\_\+position}} -\index{draw\+\_\+position@{draw\+\_\+position}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{draw\+\_\+position()}{draw\_position()}} -{\footnotesize\ttfamily void draw\+\_\+position (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Input, }\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{img\+Output, }\item[{\hyperlink{struct_position}{Position} $\ast$}]{position\+Robot }\end{DoxyParamCaption})} - - - -Dessine sur une image en entrée la position d\textquotesingle{}un robot et sa direction. - -Sauvegarde l\textquotesingle{}image des coordonnées passées par position\+Robot superposée à l\textquotesingle{}image d\textquotesingle{}entrée sur img\+Output. - - -\begin{DoxyParams}{Parameters} -{\em img\+Input} & Pointeur sur l\textquotesingle{}image d\textquotesingle{}entrée \\ -\hline -{\em img\+Output} & Pointeur sur l\textquotesingle{}image de sortie ( image d\textquotesingle{}entrée + dessin de la position) \\ -\hline -{\em position\+Robot} & Pointeur sur la structure position d\textquotesingle{}un robot. \\ -\hline -\end{DoxyParams} -\mbox{\Hypertarget{image_8h_ad904f3348c2d44f9c82435c94cd83844}\label{image_8h_ad904f3348c2d44f9c82435c94cd83844}} -\index{image.\+h@{image.\+h}!get\+\_\+image@{get\+\_\+image}} -\index{get\+\_\+image@{get\+\_\+image}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{get\+\_\+image()}{get\_image()}} -{\footnotesize\ttfamily void get\+\_\+image (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$}]{camera, }\item[{\hyperlink{image_8h_a466446fef9c0348568bc6743186d1a38}{Image} $\ast$}]{mon\+Image, }\item[{const char $\ast$}]{fichier = {\ttfamily NULL} }\end{DoxyParamCaption})} - - - -Capture une image avec la camera passée en entrée. En cas de test sans camera, la fonction charge une image. - -La camera doit préalablement être ouverte via {\itshape open\+Camera}(...) - - -\begin{DoxyParams}{Parameters} -{\em camera} & Pointeur sur la camera passée en entrée. \\ -\hline -{\em mon\+Image} & Pointeur sur une image capturée. \\ -\hline -{\em fichier} & Chemin du fichier d\textquotesingle{}image \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne -\/1 si une erreur survient. -\end{DoxyReturn} -\mbox{\Hypertarget{image_8h_aca0662ab31eac7fdb2d64fecc52ff1da}\label{image_8h_aca0662ab31eac7fdb2d64fecc52ff1da}} -\index{image.\+h@{image.\+h}!open\+\_\+camera@{open\+\_\+camera}} -\index{open\+\_\+camera@{open\+\_\+camera}!image.\+h@{image.\+h}} -\subsubsection{\texorpdfstring{open\+\_\+camera()}{open\_camera()}} -{\footnotesize\ttfamily int open\+\_\+camera (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a739dda3f6f6ddbab22617837b43a692a}{Camera} $\ast$}]{camera }\end{DoxyParamCaption})} - - - -Ouvre une camera. - -Met à jour le descripteur de fichier passé en paramètre pour correspondre à la camera ouverte - - -\begin{DoxyParams}{Parameters} -{\em camera} & Pointeur d\textquotesingle{}un file descriptor d\textquotesingle{}une camera ouverte \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne 0 si la camera a été ouverte correctement et -\/1 si une erreur survient. -\end{DoxyReturn} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__dep__incl.md5 deleted file mode 100644 index 7ad25e2..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -45c78d7de27e76d5c6847b572d8f01af \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__dep__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__dep__incl.pdf deleted file mode 100644 index 67b8b771d7e37555ce0871ba122010c76c926f76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12093 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__incl.md5 deleted file mode 100644 index 9ca85f3..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -66a23c731490b9c00275965a9e8cb703 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/image_8h__incl.pdf deleted file mode 100644 index 594fc32b0e95d953614225389e278ad4fd9dfa86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13504 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp.tex b/software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp.tex deleted file mode 100644 index f1537eb..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp.tex +++ /dev/null @@ -1,84 +0,0 @@ -\hypertarget{message_8cpp}{}\section{src/message.cpp File Reference} -\label{message_8cpp}\index{src/message.\+cpp@{src/message.\+cpp}} - - -Functions for sending message to monitor. - - -{\ttfamily \#include \char`\"{}message.\+h\char`\"{}}\newline -Include dependency graph for message.\+cpp\+: -\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=329pt]{message_8cpp__incl} -\end{center} -\end{figure} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -void \hyperlink{message_8cpp_a8c768ba3ccfd64ba1e39079c967aff26}{set\+\_\+msg\+To\+Mon\+\_\+header} (\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$msg, char $\ast$header) -\item -void \hyperlink{message_8cpp_aa938f8156bfca7379f533b751334ca6f}{set\+\_\+msg\+To\+Mon\+\_\+data} (\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$msg, void $\ast$data) -\item -void \hyperlink{message_8cpp_a285193a5a9d3b142f3f1c53c471d3173}{free\+\_\+msg\+To\+Mon\+\_\+data} (\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$msg) -\item -void \hyperlink{message_8cpp_ae409e822d69cee7483a2d41c62698a85}{print\+\_\+msg\+To\+Mon} (\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$msg) -\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Functions for sending message to monitor. - -\begin{DoxyAuthor}{Author} -P\+E.\+Hladik -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} - - -\subsection{Function Documentation} -\mbox{\Hypertarget{message_8cpp_a285193a5a9d3b142f3f1c53c471d3173}\label{message_8cpp_a285193a5a9d3b142f3f1c53c471d3173}} -\index{message.\+cpp@{message.\+cpp}!free\+\_\+msg\+To\+Mon\+\_\+data@{free\+\_\+msg\+To\+Mon\+\_\+data}} -\index{free\+\_\+msg\+To\+Mon\+\_\+data@{free\+\_\+msg\+To\+Mon\+\_\+data}!message.\+cpp@{message.\+cpp}} -\subsubsection{\texorpdfstring{free\+\_\+msg\+To\+Mon\+\_\+data()}{free\_msgToMon\_data()}} -{\footnotesize\ttfamily void free\+\_\+msg\+To\+Mon\+\_\+data (\begin{DoxyParamCaption}\item[{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$}]{msg }\end{DoxyParamCaption})} - - - -Definition at line 40 of file message.\+cpp. - -\mbox{\Hypertarget{message_8cpp_ae409e822d69cee7483a2d41c62698a85}\label{message_8cpp_ae409e822d69cee7483a2d41c62698a85}} -\index{message.\+cpp@{message.\+cpp}!print\+\_\+msg\+To\+Mon@{print\+\_\+msg\+To\+Mon}} -\index{print\+\_\+msg\+To\+Mon@{print\+\_\+msg\+To\+Mon}!message.\+cpp@{message.\+cpp}} -\subsubsection{\texorpdfstring{print\+\_\+msg\+To\+Mon()}{print\_msgToMon()}} -{\footnotesize\ttfamily void print\+\_\+msg\+To\+Mon (\begin{DoxyParamCaption}\item[{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$}]{msg }\end{DoxyParamCaption})} - - - -Definition at line 46 of file message.\+cpp. - -\mbox{\Hypertarget{message_8cpp_aa938f8156bfca7379f533b751334ca6f}\label{message_8cpp_aa938f8156bfca7379f533b751334ca6f}} -\index{message.\+cpp@{message.\+cpp}!set\+\_\+msg\+To\+Mon\+\_\+data@{set\+\_\+msg\+To\+Mon\+\_\+data}} -\index{set\+\_\+msg\+To\+Mon\+\_\+data@{set\+\_\+msg\+To\+Mon\+\_\+data}!message.\+cpp@{message.\+cpp}} -\subsubsection{\texorpdfstring{set\+\_\+msg\+To\+Mon\+\_\+data()}{set\_msgToMon\_data()}} -{\footnotesize\ttfamily void set\+\_\+msg\+To\+Mon\+\_\+data (\begin{DoxyParamCaption}\item[{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$}]{msg, }\item[{void $\ast$}]{data }\end{DoxyParamCaption})} - - - -Definition at line 32 of file message.\+cpp. - -\mbox{\Hypertarget{message_8cpp_a8c768ba3ccfd64ba1e39079c967aff26}\label{message_8cpp_a8c768ba3ccfd64ba1e39079c967aff26}} -\index{message.\+cpp@{message.\+cpp}!set\+\_\+msg\+To\+Mon\+\_\+header@{set\+\_\+msg\+To\+Mon\+\_\+header}} -\index{set\+\_\+msg\+To\+Mon\+\_\+header@{set\+\_\+msg\+To\+Mon\+\_\+header}!message.\+cpp@{message.\+cpp}} -\subsubsection{\texorpdfstring{set\+\_\+msg\+To\+Mon\+\_\+header()}{set\_msgToMon\_header()}} -{\footnotesize\ttfamily void set\+\_\+msg\+To\+Mon\+\_\+header (\begin{DoxyParamCaption}\item[{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$}]{msg, }\item[{char $\ast$}]{header }\end{DoxyParamCaption})} - - - -Definition at line 28 of file message.\+cpp. - diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp__incl.md5 deleted file mode 100644 index 3cb14b8..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c131ced6abd12634f212035041a05e9c \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/message_8cpp__incl.pdf deleted file mode 100644 index 4b180af05e02016b8aac543dab6c9260083a30bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13557 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/message_8h.tex b/software/raspberry/superviseur-robot/lib/doc/latex/message_8h.tex deleted file mode 100644 index 77da227..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/message_8h.tex +++ /dev/null @@ -1,91 +0,0 @@ -\hypertarget{message_8h}{}\section{message.\+h File Reference} -\label{message_8h}\index{message.\+h@{message.\+h}} - - -Functions for sending message to monitor. - - -{\ttfamily \#include $<$stdio.\+h$>$}\newline -{\ttfamily \#include $<$stdlib.\+h$>$}\newline -{\ttfamily \#include $<$unistd.\+h$>$}\newline -{\ttfamily \#include $<$string.\+h$>$}\newline -Include dependency graph for message.\+h\+:\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=329pt]{message_8h__incl} -\end{center} -\end{figure} -\subsection*{Classes} -\begin{DoxyCompactItemize} -\item -struct \hyperlink{struct_message_to_mon}{Message\+To\+Mon} -\end{DoxyCompactItemize} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -void \hyperlink{message_8h_a8c768ba3ccfd64ba1e39079c967aff26}{set\+\_\+msg\+To\+Mon\+\_\+header} (\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$msg, char $\ast$header) -\begin{DoxyCompactList}\small\item\em Set header part of monitor message. \end{DoxyCompactList}\item -void \hyperlink{message_8h_aa938f8156bfca7379f533b751334ca6f}{set\+\_\+msg\+To\+Mon\+\_\+data} (\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$msg, void $\ast$data) -\begin{DoxyCompactList}\small\item\em Set data part of monitor message. \end{DoxyCompactList}\item -void \hyperlink{message_8h_a285193a5a9d3b142f3f1c53c471d3173}{free\+\_\+msg\+To\+Mon\+\_\+data} (\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$msg) -\begin{DoxyCompactList}\small\item\em Dealocate moemory pointed by data part of message. \end{DoxyCompactList}\item -void \hyperlink{message_8h_ae409e822d69cee7483a2d41c62698a85}{print\+\_\+msg\+To\+Mon} (\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$msg) -\begin{DoxyCompactList}\small\item\em Print message, header and data. \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Functions for sending message to monitor. - -\begin{DoxyAuthor}{Author} -P\+E.\+Hladik -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} - - -\subsection{Function Documentation} -\mbox{\Hypertarget{message_8h_a285193a5a9d3b142f3f1c53c471d3173}\label{message_8h_a285193a5a9d3b142f3f1c53c471d3173}} -\index{message.\+h@{message.\+h}!free\+\_\+msg\+To\+Mon\+\_\+data@{free\+\_\+msg\+To\+Mon\+\_\+data}} -\index{free\+\_\+msg\+To\+Mon\+\_\+data@{free\+\_\+msg\+To\+Mon\+\_\+data}!message.\+h@{message.\+h}} -\subsubsection{\texorpdfstring{free\+\_\+msg\+To\+Mon\+\_\+data()}{free\_msgToMon\_data()}} -{\footnotesize\ttfamily void free\+\_\+msg\+To\+Mon\+\_\+data (\begin{DoxyParamCaption}\item[{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$}]{msg }\end{DoxyParamCaption})} - - - -Dealocate moemory pointed by data part of message. - -\mbox{\Hypertarget{message_8h_ae409e822d69cee7483a2d41c62698a85}\label{message_8h_ae409e822d69cee7483a2d41c62698a85}} -\index{message.\+h@{message.\+h}!print\+\_\+msg\+To\+Mon@{print\+\_\+msg\+To\+Mon}} -\index{print\+\_\+msg\+To\+Mon@{print\+\_\+msg\+To\+Mon}!message.\+h@{message.\+h}} -\subsubsection{\texorpdfstring{print\+\_\+msg\+To\+Mon()}{print\_msgToMon()}} -{\footnotesize\ttfamily void print\+\_\+msg\+To\+Mon (\begin{DoxyParamCaption}\item[{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$}]{msg }\end{DoxyParamCaption})} - - - -Print message, header and data. - -\mbox{\Hypertarget{message_8h_aa938f8156bfca7379f533b751334ca6f}\label{message_8h_aa938f8156bfca7379f533b751334ca6f}} -\index{message.\+h@{message.\+h}!set\+\_\+msg\+To\+Mon\+\_\+data@{set\+\_\+msg\+To\+Mon\+\_\+data}} -\index{set\+\_\+msg\+To\+Mon\+\_\+data@{set\+\_\+msg\+To\+Mon\+\_\+data}!message.\+h@{message.\+h}} -\subsubsection{\texorpdfstring{set\+\_\+msg\+To\+Mon\+\_\+data()}{set\_msgToMon\_data()}} -{\footnotesize\ttfamily void set\+\_\+msg\+To\+Mon\+\_\+data (\begin{DoxyParamCaption}\item[{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$}]{msg, }\item[{void $\ast$}]{data }\end{DoxyParamCaption})} - - - -Set data part of monitor message. - -\mbox{\Hypertarget{message_8h_a8c768ba3ccfd64ba1e39079c967aff26}\label{message_8h_a8c768ba3ccfd64ba1e39079c967aff26}} -\index{message.\+h@{message.\+h}!set\+\_\+msg\+To\+Mon\+\_\+header@{set\+\_\+msg\+To\+Mon\+\_\+header}} -\index{set\+\_\+msg\+To\+Mon\+\_\+header@{set\+\_\+msg\+To\+Mon\+\_\+header}!message.\+h@{message.\+h}} -\subsubsection{\texorpdfstring{set\+\_\+msg\+To\+Mon\+\_\+header()}{set\_msgToMon\_header()}} -{\footnotesize\ttfamily void set\+\_\+msg\+To\+Mon\+\_\+header (\begin{DoxyParamCaption}\item[{\hyperlink{struct_message_to_mon}{Message\+To\+Mon} $\ast$}]{msg, }\item[{char $\ast$}]{header }\end{DoxyParamCaption})} - - - -Set header part of monitor message. - diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/message_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/message_8h__dep__incl.md5 deleted file mode 100644 index 8d61829..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/message_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -811e4feebe2d225a8b0a213cddc02de1 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/message_8h__dep__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/message_8h__dep__incl.pdf deleted file mode 100644 index dd6ddbcc773f1435f4aeb8e0304c18e306b52274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11755 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp.tex b/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp.tex deleted file mode 100644 index 954365e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp.tex +++ /dev/null @@ -1,163 +0,0 @@ -\hypertarget{monitor_8cpp}{}\section{src/monitor.cpp File Reference} -\label{monitor_8cpp}\index{src/monitor.\+cpp@{src/monitor.\+cpp}} - - -Library for sending message to monitor or receiving message. - - -{\ttfamily \#include \char`\"{}monitor.\+h\char`\"{}}\newline -{\ttfamily \#include \char`\"{}server.\+h\char`\"{}}\newline -Include dependency graph for monitor.\+cpp\+: -\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=350pt]{monitor_8cpp__incl} -\end{center} -\end{figure} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -string \hyperlink{monitor_8cpp_a04c8d7ed93b301fafe6dcc08d64ba21b}{server\+Receive} (int size) -\item -int \hyperlink{monitor_8cpp_a7265ec937de7d9ca68b81e5bd8203962}{send\+Message} (const char $\ast$data, int data\+Length) -\item -int \hyperlink{monitor_8cpp_aef87d80a1e44bf1953b3282967282ef0}{receive} (char $\ast$data) -\item -int \hyperlink{monitor_8cpp_af49d46447ce41019bd13a2c07a000644}{send\+\_\+message\+\_\+to\+\_\+monitor} (const char $\ast$type\+Message, const void $\ast$data) -\begin{DoxyCompactList}\small\item\em Envoi d\textquotesingle{}un message vers l\textquotesingle{}interface graphique. \end{DoxyCompactList}\item -int \hyperlink{monitor_8cpp_a61eca0d5b49118350db39583e1bd1032}{receive\+\_\+message\+\_\+from\+\_\+monitor} (char $\ast$type\+Message, char $\ast$data) -\begin{DoxyCompactList}\small\item\em Réception d\textquotesingle{}un message. La fonction est bloquante et retourne par référence le type de message reçu (D\+MB pour un ordre au robot, A\+RN pour la détection des arènes et P\+OS pour un calcul de position) ainsi que les données associées. \end{DoxyCompactList}\end{DoxyCompactItemize} -\subsection*{Variables} -\begin{DoxyCompactItemize} -\item -\hyperlink{monitor_8h_a29046dc0232f0e5c70adbc25090d77b8}{S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN} \hyperlink{monitor_8cpp_a1f38ae3a59ce304779ebbca10378654a}{ssin} -\item -\hyperlink{monitor_8h_a8dc8083897335125630f1af5dafd5831}{S\+O\+C\+K\+ET} \hyperlink{monitor_8cpp_a6e91849780a994f2adde299b33642829}{sock} -\item -socklen\+\_\+t \hyperlink{monitor_8cpp_acd1a03adb2455aaacbd886642518d569}{recsize} = sizeof (\hyperlink{monitor_8cpp_a1f38ae3a59ce304779ebbca10378654a}{ssin}) -\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Library for sending message to monitor or receiving message. - -\begin{DoxyAuthor}{Author} -L.\+senaneuch -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} - - -\subsection{Function Documentation} -\mbox{\Hypertarget{monitor_8cpp_aef87d80a1e44bf1953b3282967282ef0}\label{monitor_8cpp_aef87d80a1e44bf1953b3282967282ef0}} -\index{monitor.\+cpp@{monitor.\+cpp}!receive@{receive}} -\index{receive@{receive}!monitor.\+cpp@{monitor.\+cpp}} -\subsubsection{\texorpdfstring{receive()}{receive()}} -{\footnotesize\ttfamily int receive (\begin{DoxyParamCaption}\item[{char $\ast$}]{data }\end{DoxyParamCaption})} - - - -Definition at line 90 of file monitor.\+cpp. - -\mbox{\Hypertarget{monitor_8cpp_a61eca0d5b49118350db39583e1bd1032}\label{monitor_8cpp_a61eca0d5b49118350db39583e1bd1032}} -\index{monitor.\+cpp@{monitor.\+cpp}!receive\+\_\+message\+\_\+from\+\_\+monitor@{receive\+\_\+message\+\_\+from\+\_\+monitor}} -\index{receive\+\_\+message\+\_\+from\+\_\+monitor@{receive\+\_\+message\+\_\+from\+\_\+monitor}!monitor.\+cpp@{monitor.\+cpp}} -\subsubsection{\texorpdfstring{receive\+\_\+message\+\_\+from\+\_\+monitor()}{receive\_message\_from\_monitor()}} -{\footnotesize\ttfamily int receive\+\_\+message\+\_\+from\+\_\+monitor (\begin{DoxyParamCaption}\item[{char $\ast$}]{type\+Message, }\item[{char $\ast$}]{data }\end{DoxyParamCaption})} - - - -Réception d\textquotesingle{}un message. La fonction est bloquante et retourne par référence le type de message reçu (D\+MB pour un ordre au robot, A\+RN pour la détection des arènes et P\+OS pour un calcul de position) ainsi que les données associées. - - -\begin{DoxyParams}{Parameters} -{\em type\+Message} & Type du message reçu \+: D\+MB pour un ordre au robot, A\+RN pour la demande de détection de l\textquotesingle{}arène, P\+OS pour un calcul de position et M\+SG pour un message de l\textquotesingle{}interface \\ -\hline -{\em data} & données associées au message reçu. \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -retourne 0 la taille du message reçu ou une valeur négative si la connexion est perdue. -\end{DoxyReturn} - - -Definition at line 83 of file monitor.\+cpp. - -\mbox{\Hypertarget{monitor_8cpp_af49d46447ce41019bd13a2c07a000644}\label{monitor_8cpp_af49d46447ce41019bd13a2c07a000644}} -\index{monitor.\+cpp@{monitor.\+cpp}!send\+\_\+message\+\_\+to\+\_\+monitor@{send\+\_\+message\+\_\+to\+\_\+monitor}} -\index{send\+\_\+message\+\_\+to\+\_\+monitor@{send\+\_\+message\+\_\+to\+\_\+monitor}!monitor.\+cpp@{monitor.\+cpp}} -\subsubsection{\texorpdfstring{send\+\_\+message\+\_\+to\+\_\+monitor()}{send\_message\_to\_monitor()}} -{\footnotesize\ttfamily int send\+\_\+message\+\_\+to\+\_\+monitor (\begin{DoxyParamCaption}\item[{const char $\ast$}]{type\+Message, }\item[{const void $\ast$}]{data = {\ttfamily NULL} }\end{DoxyParamCaption})} - - - -Envoi d\textquotesingle{}un message vers l\textquotesingle{}interface graphique. - - -\begin{DoxyParams}{Parameters} -{\em type\+Message} & Type du message envoyé. Les valeurs possibles sont I\+MG pour une image, M\+ES pour un message à afficher dans la console, P\+OS pour la position du robot, B\+AT pour une valeur de la batterie et A\+CK pour valider un message de l\textquotesingle{}interface. \\ -\hline -{\em data} & données associées au message. Le type de la donnée doit correspondre au message \+: Image pour I\+MG, char $\ast$ M\+ES, \hyperlink{struct_position}{Position} pour P\+OS, char $\ast$ pour B\+AT et rien pour A\+CK. Attention, il n\textquotesingle{}y a aucune vérification a posterio. \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -retourne 0 si l\textquotesingle{}envoie a bien été réalisé et -\/1 en cas de problème. -\end{DoxyReturn} - - -Definition at line 40 of file monitor.\+cpp. - -\mbox{\Hypertarget{monitor_8cpp_a7265ec937de7d9ca68b81e5bd8203962}\label{monitor_8cpp_a7265ec937de7d9ca68b81e5bd8203962}} -\index{monitor.\+cpp@{monitor.\+cpp}!send\+Message@{send\+Message}} -\index{send\+Message@{send\+Message}!monitor.\+cpp@{monitor.\+cpp}} -\subsubsection{\texorpdfstring{send\+Message()}{sendMessage()}} -{\footnotesize\ttfamily int send\+Message (\begin{DoxyParamCaption}\item[{const char $\ast$}]{data, }\item[{int}]{data\+Length }\end{DoxyParamCaption})} - - - -Definition at line 97 of file monitor.\+cpp. - -\mbox{\Hypertarget{monitor_8cpp_a04c8d7ed93b301fafe6dcc08d64ba21b}\label{monitor_8cpp_a04c8d7ed93b301fafe6dcc08d64ba21b}} -\index{monitor.\+cpp@{monitor.\+cpp}!server\+Receive@{server\+Receive}} -\index{server\+Receive@{server\+Receive}!monitor.\+cpp@{monitor.\+cpp}} -\subsubsection{\texorpdfstring{server\+Receive()}{serverReceive()}} -{\footnotesize\ttfamily string server\+Receive (\begin{DoxyParamCaption}\item[{int}]{size }\end{DoxyParamCaption})} - - - -\subsection{Variable Documentation} -\mbox{\Hypertarget{monitor_8cpp_acd1a03adb2455aaacbd886642518d569}\label{monitor_8cpp_acd1a03adb2455aaacbd886642518d569}} -\index{monitor.\+cpp@{monitor.\+cpp}!recsize@{recsize}} -\index{recsize@{recsize}!monitor.\+cpp@{monitor.\+cpp}} -\subsubsection{\texorpdfstring{recsize}{recsize}} -{\footnotesize\ttfamily socklen\+\_\+t recsize = sizeof (\hyperlink{monitor_8cpp_a1f38ae3a59ce304779ebbca10378654a}{ssin})} - - - -Definition at line 33 of file monitor.\+cpp. - -\mbox{\Hypertarget{monitor_8cpp_a6e91849780a994f2adde299b33642829}\label{monitor_8cpp_a6e91849780a994f2adde299b33642829}} -\index{monitor.\+cpp@{monitor.\+cpp}!sock@{sock}} -\index{sock@{sock}!monitor.\+cpp@{monitor.\+cpp}} -\subsubsection{\texorpdfstring{sock}{sock}} -{\footnotesize\ttfamily \hyperlink{monitor_8h_a8dc8083897335125630f1af5dafd5831}{S\+O\+C\+K\+ET} sock} - - - -Definition at line 32 of file monitor.\+cpp. - -\mbox{\Hypertarget{monitor_8cpp_a1f38ae3a59ce304779ebbca10378654a}\label{monitor_8cpp_a1f38ae3a59ce304779ebbca10378654a}} -\index{monitor.\+cpp@{monitor.\+cpp}!ssin@{ssin}} -\index{ssin@{ssin}!monitor.\+cpp@{monitor.\+cpp}} -\subsubsection{\texorpdfstring{ssin}{ssin}} -{\footnotesize\ttfamily \hyperlink{monitor_8h_a29046dc0232f0e5c70adbc25090d77b8}{S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN} ssin} - - - -Definition at line 31 of file monitor.\+cpp. - diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp__incl.md5 deleted file mode 100644 index d1b2e27..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0dc23e583c45f2eb8efebc11b109e3a6 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8cpp__incl.pdf deleted file mode 100644 index 8c5108cf2d49873ac0c57197b79c10221f46f645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15473 zcmcJ0WmFu^)-LW&a2woZaCdiicXxO9KyVKZ!QC~uI|PSdL4pLA02lI}_k2gbb=UoK zd#0;<@7h(nYFAfR&6?*SR}>Ye2Qsk1kvE-IKf$pAm;esO)^NPM07h9edka@f0Na~N z84dsdFp68*x|%t^U2TnA%|y*i98AsN`1#>nT%FB~?BG1Jt1{#q@HkMy&!1>LlaWhC zahxUf5kEkJU4L25wPmH*k;Wc#C#`tkf}N>Q6Sao=(=4Bcx`@67o}M!d)2A(;OZ zDZgZShZYi1#J98E-kpmY@n0*06le23cNIR^1@pNI9%nn;tsT?TdhR?B2Fmbz?g1v+ zwYj+g19C4o!9HQH0Z0y;JBizyh``od-JN6Q-e>DR`kS~kk=*cyG!2ofs;0zZM&IA5 ziLJ8f?oId%_S5}dy)4!C5gako7C(})a;MU?(PT)ym0dT7{uZ+ z3UP01IcK-hOn9H%QaS z9pQ}5Hyw;Zyx%w8js9a}!)Cpvhk&s%g_Y}=+*1!L@Cch01qx&V4dtPfM$ zPwyz~@LmPKoUHZ5Vt$gORdL+5mWr_YZIheZ0@gMxLev6a6MT*?3q|RV`i?Yda_Xsu zsr!Z08;mY82|4t_e7VZFtj-&WNj$E5i5Z@(t8^71VVK+m^*HCl4Y6&UOT5fBP)JwS z5kpo()@MGh|HG(rOM)#fFDmaQOmMpB=dkq6B5b|o1#!;wii8j3nw+uqv)0_aK$n0~f0R^aa&kjj%f z7_G5}nhx6+2}Py8~xYx*(FftE)Ks$>f+Lw zn8n+JR2II)had|MC0xyu_BqXaQ>Dm#0)Z{z$%#b4j!-Ni5d&deNo@1DEn~@ft-b0- zi{*9dMgq5|`m)rjl^X0f4~;Rc{=@;)?wv{>beKAv9XbjG+CWpdg5YvdeKr58Ph<5A zTa}S;2CTRYMX8A}a1^s21-|^X<&$8;o~kVU7hVo3pR2h3L}DEcO;fnkN^?%M7*sFb zut=D4pLGUSj16%hV6HI@9utiQx;2klxH%8S33*pQ5qN&9o{eTAuN>@^an`NVJd>rcL;bR z4DA?HDsDQ^4DDsQg=5}D5mgo&mY(R~;uQwAWqgJ6oKIgEqAHp#Qo3({@U`d#s>S1% zsQFsCriWzcdDvA;%=ZY)zR-wb2m25nJk>Tr za^8Rh=M#8zX|K2n$1of-y2>f5)#p~)kvdJA(t;B;kS--Lq*}dvFgwL2CYp&Qqcgb< zd~rsU#(voYtW|fDB8c(YV2y8*agfhG%IBi4Sc??}&+P{qIkU|8TIiI*!NRI6JKeWK zAFP_~r0^5Yu36zZzvKnm$Fo9!uMLqU%AM@6wK$nvW@$-S7pD%plg<^{VaW|ZKOv6) z{)VUEhr7{s-n>jbDUX#UTo>?A8}RIqMUYifIuPg$W|OZm)yzlUrbQTONv;+QyD7=0 z9y%V=UCRC<_5^lKe^IJM!-snxZLW*B#im-Vs4|1cZLH@XzB4~0+9gZpl)rE;$5X#> zRZz;s zyf#rSQx&DE^GlEl4h5K^W=YjmcNTg`H4(2ML(!9!aAt2K{nwiMcK5y-zc0b>*SAF& z$jQ$3ZtyO${ByDXvpkD=x=N_HzAeoFUfy@b+renW^dQ%-U{v*TGy^ay8d;bD$N|7V&J~TE&EDz) z{#}+)&dk)xNZ7#>p!23;0&sG20hrl20eXL|Mc(|rnY#eq_Zxq0E+m{C+#LUSS&5ptTbY1Je)rR( z!d(xcpLHy^MRn8dx=Rh8$H#JDbgHsQmfGCv3L4c9gz#GDdM6mr1wr{#!n0LOLkxBL zyejBz@{tH(nF{b=POw+f7~u+NR~Klmkgyjm%2TMuz)lELIsoH7w>u$-6tWITAbjsA z>A)oI04>P&&i3}JMSepTO7GC*3R;-@>dN3SqNxouD%kH6)ZV;`;^~oziA#@A6-7l9 z!=tNd1VN}nq9G;9mt>(#W6LE<76cvNvpl0;qBesDRRySkSMupDyL|;{Am};XJ zQBwBennHqVg4qcfCikou^a*AK7^=ZX;*H=L4t%|xlLr|-|JL(aR-f1K6v6%ap+k4F z4;IEStr?_^>vdlWNjaxLk&KP?eqD3{djOyc9oE!4hR+_QE%Vm zt@9pVl1gC!y2Lo{*?@0gzZX6p# zChdmJJ|d668bZH-wt@U)4-m8m={P0&1l?39#`{l)P&c=w3oBc5~j z2*@j_fhp&E()t_J;K1z(ynEv01=`n&Y!CUKq<{B4xpEk}VNRGfxY%N!AM2ky-531r zMq%Lon7a&hy+Z|A5c_U0rg&Y2D{xV;O++i@ZH0OCm1>#( zBnc0y<6z(;?)m3WUGg98E#)82V4x=*Sq~()Gu8pZyG^T8Kz^@XNQhiq_~y!mqia?Bwv_O4;_+GQmqz+B7XeVNYbRA)fqUYBp1Nv@PpfE zGmRL?x&NX@@QI#*21kyrQ(1Cz`ouLIQ7EzsN=2P!N{mnRcgC(szK2I}0b1~E40BVh zgf|cSZMXWKqFdT!+wIs_sa!(0eyP%W4gDhTF8VdN_rt zi#Qzh5i0HN7){4>I4b2drPP-SNkz?#VlXh#w)1xV-dm4-vj66%? zB@V?1p(%qTT46c6wuawuMq>7Km9ekb2-kI6-W0Jk$uLPjAiKW^|EC?HFJ zX;0pJY754M;2C=REf~J?Y8j(5T-hMWn%LQnGD$<`XWGmTHIcpTfchZjL9EqQ;!d+& z9r0Om7Epg{`^_)sp0n_l=66hW*{6L@Sfbcf!9|HgO5dR|+Nr(Jv7z04A!nr&ir5Ui z$qeA|9HW~>^f*tePFz!L&H&oYMJyOcj=@Bp*p@G}2n;eIfmFvpR_@L$rXrn(WLt0laQ;WkkG^nEC`73{l z>+*wuE9Q8@XdUCDYqPpdQhJqXr<>&=hSMEbtj5DIJ6wIAGODWj&GE7U4{Be~`BQxP z_IHF1eW#X;Hk3?!3thl>P}(3)FDxd-F~zkAhJ{U8cXDk>Sf@IcU}Hp%==Pm2Ph7qM5rpQgpAijPw_0Hjh}{x20Kbi-o)<0x*%S8R zw(w2z0gyJSr$q`J^s8b4mR|~gr_2@aKgS&h*$AcL##wqNA&m3$0NIS>9|s;u-9v(i z<36E9G}c4y;oMOS+KV8{%c#io_y%R!QOF_352ippS7RF!@T1$rhkUcLeI(arX?vY* zar6UAj7#crsl7923h||{PsY!?!;cl+Vdu*8_L>m^Ib>~KtUg#J-_S;M_(H{AxXZrK z(`lI3qqcyMaES#^>2!~MSdL7dtV>~ppYJ1cyYgfRm#{l3C{oO$bnhd;=NJ}z*E-+- z9a=|y=8lWi)fj}!9X1LBbmjC1f^)Zio#6|;^e^!E@V#56TKi524Z?=K&Y;#~>lB$x)0IV* z$&nj{E6JWGe^jB%exUZa4pIG*B|&m2iu!%~fb8Q=-0Spoif{P##+>wuMl&f)0?t8* z9-+f$`doV<8rem|BIEUBZw}8oO8W3X~Qxayv%&vI@0<*e{0(^F3nMx zrQq-5ol!0^YeQ!>3DRC3>g5tQX_NfD%BJUaD6*3p&v3VmJ*>Y)Pvz3@KMPsaDAqQ0 z!w~uv;&s_DT4iEQvo;6|z@NobDhQ&!Shvv?R^@}ltrfZk-YWPnSqEL6Z@F)JE8!!_ z5~3EBJi8>0_8(^6^PiQ1FHM_9(veqW-^y)TB3Mk zm5&yZdszi(AA4DuCyXX!J~3vNB3>ECYppt_4+}enoyoNKU#HXT24h4c8G2;76zJm5 zNY+Tivg01=D<$kWb{!PU-&c>6gf4hNe3d51#^%(Md>oT5-mx$XK!ta{O=o_b`T92Vw0N5>;B-kH*%_jSOFRSL=dc;H3wnaRUv96bS zKIv&N(CQ#?z4@tmc^KV6e@RsfH|WJeKq<%#IkQ^MzG98=C-u=m$f7E<+n`Ni^Pubb z-ef}_28UDMX=PQ3;7=B8I)*3f>XDXl2S_cV117_IiyAS?%>o)NR!Fz#B&s<}17sUJ zoDS>_w?10z6Vr{a7`em|;$~INm3a zv?k5gz>jRJOsk*t&8x|0cV$`W)W0gTk{-iPF{5&fyvb@okM9l_w`C3UqQj4~>{O)X ztv%N4Jz?L`9Fbh?ASRie>Ga+ZVU_01%prh!75d`yQT*Nn0-nQ{*4mC+CUWFL^kTi1-w{U?qS|~Xl@kF(o zO@p-FDsnxMAhry;dn>u3bJa6cxrNU^SX6MW_*fM2|icTbE zfrmk$veVXUhK5{6^E5F-hwyl)IZ$-2YGrSX&*Tarq>Jrr#Y!Mgk2p`LEiDwN*U*Hb zXfnVUq1WrZtP|Av!1@po%BB6W!+O2prpcy92^fDAkC^rGXJ_A>uOB~mL;<7j*FZdk zmWF5|&p2M%QE&_%y?kf7goTQBN8u_viz7a9i1=*`Bo!Sxwyb@P&!Yo$Xx`s4eyK$Q zYS&PUV0#HVsxHzQnL2{x_G;1;9NaDeVcLB zcdJ+$YF$*P4*~aa11d=}?UU0T*3nmQE$%I4VL25h%Xj_4`nBJnJ>yr^60OMM{BVJ& zNGiF8tf+#~Q>$?Zj@a=*SZur!0rS&ucV_VPVi16D%9{$=Q#w=cNKdISV|e znZ;Vv6J`k4;e*f((^FA&t1@R_(7l*E#A$lLP?8K2w%BKALnY4kWh&gTJ=P_<5eg*Ea8)!O^or)-)SesGvBppL zfdS<8(2K|3Tk8lRz7SKxG!$Ax|vAVw{Q8ezugvO&(G@e^8fGQ#ED)N&3r|CnAwT~;@0tlb zf5@Y8KLGb)^cK*HLn`NG1Um`N2<8UL*eyr*SiPziu^7i>R~keCR}>dJYgGgt4~-@7 z0lk*GsSm)gHErb@>0yTDtI?czc+nzSQCeesT2|n-U-5~H3l|wZiw*a0YH=R@#6W;< zqmd6{CucuhHjQ~4j&?MffW_ax4a+*=+0GepvM!pK{fwb`WV_E)yAb-D(SEMr-^TVQdKY6U;#;ul_GnS*WyX~0cBB{R(D zpH|Rjl&GIEr%sx1j+-lFF>S85y<~Q2lqZZWq}zOl7cz6Bnp=l=nxxE~JNt6^9@Ai1q6@lpkbei~0?CUi;+$*#@HIPIk4UzA1;S^}J| z5jB^#j70kUqrY_SBvYN=dR4c#ZSF_6fC#C%du={yi4`i`eBLG%$+`MYDDN>|M{#;5 zJ>s$9i~hoe&3mO&Kw93S{GN0L%t}QhzczCXhB6+u{9Feb(07IhuZ?h=x+5F|RPThT zXr8@?2-AAL)zq`j;Jo*uB#IZgus_J>+i0U{E;!vBHp2Dq?3y!?i%i$gY`7-fW#(!| zD$TxAxjspNkHMU2r4c#$B>QTMOA5G!i2`e+wlNWoGN~wBcrzN~{fk>#Q>Ru;d5i`= z!h%s$CFcGElpL}PW#X@8M^>Npmb7pgz4HkkEEi!vZf_Qz$e|2e-c)5#yac9=#|>Kk zIBmL%hi^906tHa|uPyJzaU)B=u!a_zfiyC$CBXH^bIDd8Wz#1s@!UvZR^L2><$H-j z)K+)p7OenSc)?A|=oN zKi$N@Jdykhhc-XusUi>8G%^)|yHOj9PTtKjTr*ri@9IuMC9aTO&m(>FzX{^pO@GR# zvS_Az^pkZ_VO7xy@XPp}AvA|)wFe^ST2^h#ZObbua831!2TAH0o?`Gkh~wCf)Phc0 zVT*}+^NC6!*@Vqj7TXi8!+w*><^)O1(XEtA!y@t<=|{gTc!2-}offof>0d|f(vQ~* z`(yioH21)Ot7m#1VlWAjoS~bO! za3n&!l!9CiG`^P1p6CeCq?*R*Ju2#}#NaTbN(xL-1Zq)T$)lf!1BAh(q{`5To zqbSmj%Lp_|dnao6?O$7_7DCfpS5@Q+H&BL?iU}}m<>^2E`Kd^p3&7E2@y-T3YO>0cPC^oC0oj67J1D%B} z)RnB!capbfZkn*GS7o1{B^oDy0{Jq?PG-lD1b2BwcQhJf(%cp!Raw-TkttjY_ z31vhx(M@y2LhO!q=fc#kOVRZ~o>;Q19H7aMOj|+dQ|iri4=b0YBqB=fE#<2+6x6SD zzWXDV;Uf_gf}^Jg`q+<92-@@+qFduLwarfvIW~UVP>br23&!)|ZlfdBHk81I!~g;v z`xU3A+FwGu?W^_u387{D1m&w)1{js5odsn%Tg9(v*?FJm#b(~$Ki%kV~P75=UgE>Jz>KpSM zUnVZ34QMX5Gpoo|*j@&K9dF08J-Kq6<3f1jbVSN^+2wZP@Ka8yhu(f)^4ue}&(i5W z@2x!@SV?uTQgp+_XAyLZFBkpVoQHFiA>j~UKT^MrRO2e|Bycl~*7K-d_9+`- z8Ay(v)RM>CWNJAv<{I_2VU%TKL3YyBRa~#4FcI7u$e@$Q{wN+-rI9ndAWONz&YNIZx07A^M7qzQoyFRJ0*^%WdX%k4QE=jlZoS%|bu^}=(z}q%#8O8P8^3dcR zL-swPMP*T8SqAy4gkXiFri36q&#&bSdAVN|32Z^hiFmZpib_mv11=ml2wc2dub<3rQQ;5`1MhsHncnqeNj3j!Ek1Qtbgh;LsT!cJaPu zs_F8Ua2I3(@@A|mE5iflph5G_geLGhR9jiCb&U(96igR+uR2G25kA23Yz$6(v}*62 zjV>jbVq9`;=~jF46i8bfe`S1?-@wfNH= zDq&8VNG-%@ZG8&zL)G_ufQltcni8_mM_sM2QEC|W5rGN=lLebsrM47BACQBPEsEQS z(3tz?G*^td`SE)r-NIb&FFCD;!%$9@Y=nfM8~!C-4!N1T698c0+~YmtA9Kb z4zKjr)%+6UkFcsY_ixnTF?hj92_fIc8Yg0N(aA zhM_~>Sz+oSXR2){4oQ-o!7=I&q$_bv@9p9t!YZ__k{|i?MU+#5H9h7b!6vAR(&{TO z#JIgFLyM^=YwTe5BE=c(Lv+UHo-e^B99Q>>ztz?*^k!-<30!%cN&1FxX*kkoV+(t4 zX~?O6546~$<1`~fC*q^1z3peULHE59DGPi*QY5X2Vkhf?4{>2rE=EpJ-%jV4D^$UP z{OpuDa84vbPMknf=54Q!GzZr;8$bo$-9N1Z+4(;6gn7*GUr_YWrywK9@oEHi4fFKL z?U0*QoDI;nJ-m|m9Wl+&z_SSNCsXMp&lYX#&%~;N1gNVk&J@ra&yxu>s&h+$(lXP{ zgJnG9XuZpiGlz%hKmDmcmP^km03nnFO1e!Kws3SULLaHVUJ$CxY-R1pgKF{;HuyU! zj}}`F4cFhU-y=y-`)kbXVoxGabHK*vBgh7p_XhL!__11PX0=3l>s#cUYe$0?edt<* zKu32*rd8?%-tyiKEU%0CIx}APP2OlBA85-b5b19F+6UW$Dqk+h9xKQfmEkf{tO^wS zY!y;qMf;n>F9}!)Hz0#aUi?g5TUPdhwW6{0{?=~>CoVqGHj;4&DN>L5l-E!;9o$y1 ziJgjnUX4Ukm91);v3_(L?lFhk>%b7sNm-o{l|PH?)0)W4X_x~3lk8(eGntQK7eCxK z<;0vt5bB-#bg8MwFb!0eW&3sFsB!Ee0j$zcYW^G zG~}F<$y+Zj>Ese>hMVeNQ_1n8jyRTfC$QaB{ex@LU4!2Py zxz8UTP<_nLt;=PpXI1w>em~5{GsDWz%9^^sFGI~BY)*6AJ|QQ%TBfy0BuH^tNfPY? zT8gg*V;!1ka|lQ&qZ9Ke|L}ErwX_ssrI(hRwqZ8m>G4wn?9%S3z zSN_7rgRDqd`F@7Kpd1?<&N}v`9M86{9oyFLI;V$3(_6J%L6fH!0jKL%3XF`|Ib52D z-le1jRm8oaK+xiL(o8)hDc-__ugoHp$<=L>E?A1@i@3s3n0IM{xpi(u=CqP4?~^Z| zkOE7Dy{j>S-phxwOxl**r$+*e8XNUsj#5!=89D5pUYWMlp9F529k<` zt1*q?G^CVW%^)Sa>U83pW1m>QO;RQfpg@~T>y=7H%?%ugh!VDGT{E&!p_a&!#m#|b zL_hMFW$HAhimUlC%suaLH)Scee>ldoyKCrXN2m22w-^Fe|;d1Lf$s}t?Q^su0ry8{{p(;Kjhso_?%4%K4m2`^_9rs!;N|3mzha9p8hqVW~4qG82rioxqoIQF%c%bPr z_y|GxjcK=e#N%#}pKT&h)yml<#_3A~utxybr&Brn+$|BEznLef5V0NvVVMFLxkE5N zZ(Z~0lYHU;j>%{nq`G^5JaW9m&3(3X(nV?an!LkmB%b0D+ahKXggcM!98Ic?Hrq;au=>&b2IbPn5!4AWaPd~U&-6( zp1HjVxQJ5bk(Fp+pE)dsjjV$zk)YB)ceRi70a=v0CvM8Se%9^!k+n$m8FOx_>$3ff zl?i`JAMSH%AX9Km>9tuECHS>JA|SOw!qwtAm-{p7i&B6!f`}HZnZxNvO(;28Tjkv! zb7yaVNa!lHgcl~LQ1{?!c5m!A&=GgaS864d+mDK)W_iUjwBm4Q7Yfn#xn_1#+sW;> zP4peLKHg%N#}ty*E0+y~qgsNgczB?_=sSqhsy$rYxv*_>HIxUWYm#Z6ve z{gOM1lbLNDhNK*xPxL*q+sjV`=0?We1VtU=Hj9gedz{g39;$J(ntL`?iO&;w7i(CifV4-@qv`MFS<94md=7c_3u@=TQ^%_OVU(<{ zFRHI;GzOQbtWpq*ZY>H_tZfPk2nHSQ{2i@`Og&gr;m*fAKDC{nhB^f0Z!)x~)V9Tt zA%rm;>OE&})i95!#$AjuDfJyb9Qt1WBz4I@vZV*`Oc^qZaB++;7i$3nwtlwC-_e@i*lnDUbu0H(CC6reP9STFGjPwh z6V%$K_a5I96M?fK(}-XPl?H4SApfvX3d%15_nok4>hpGBY#P#RjWGl(=g@}5e520%&%Dl zfk6Q70%KuE!_%Q3(EY(LPvZ}qBia{=B|;OePm)_<9ar@h;wTo;p$D&blpG}mVvy+j9{ z5Mm-Eo|i`n)+!gsnk5Vr>Poqd6YwUK&TJ=k;kqa^r$}!+W!$OOeLHTx8mfK0O8OZJ zQ0hP=9+PfJ6Uf^xCmI`s_@`|Mm7l!V8$%0Y@snsArK-?;ktiC4J_mJR%1u( z=AhG^)2rQ~dytvkJ1wP)%WnmYO1S}pTRV7kwlELd0q)VJSh*CLQ(?DdMT2_;RwM_@ zE)gv5Jj)CBE0>jilHkKrnbpV1%li|fj>F_5xCM?xc2GU?!AT3bsWVCH9?nabx^!Cm zT3UGW#8w3V;{fJ6iEPY9B?nnOI?>fMXwtCOJ7(YNA}4n2{tc9v4TXo7_JA<&jN=3w zA6n0ud6zPhqcJoT8R9Ww8Iy>9t8tU`aRd3U%5n(-C)EX-pY*EIZM9##AU$3&b&95_xWajlT+?B2++?^0q{0(#4-AC+*3 z73x{xb&kEI2F?0WVvkDNItLXK)nWY)c>@7)8PX%2|ppmGogrdVEwpt_s;{@T5(e9-{X4z6L#6RPG%h> zW99QG{7Qr*COG6eH^(3NBx0q~*5`p3;)353Gl=ag1KXpPs_#OzN;ty%ozOE^xowCT zuX$?OoTP+%quLE6KlGZce6!)M=%5leiMjp^I;DLCbp#9QYEh~%Srx{wS} zw@zWtrB14_DZX5p?a~RUb3V5lxRpR}=Ms(S2F}?VF|L%$#y0zD+=K$UmtWsB!{$o3 z{WP)?vVL5KUR+FJqO24kOIQ`*^c_H=3;Znh7WG$h_T_6GLii{#Eeq|T0_h4JMICCh z`>mMqn!q$>uR_Z6HoilhAA6GPFaxdjlcWVd^Ca~K(Man3`m!+^_p-8R;t7g&26?wp zsbTTFv=@A_N%p=bc4=oodK-+dV`BHA$S4~pYQ-j%5&AFAsK>?}b$u6(by2H0L(Kt+ zA9d;yP7R^KtC4}?={vnusDf89LC#p!EfiX&!*d`z*M-Nr)m6Z z5Ab`84=QX2kmksoJCW71^o~tid3j$C$G+uxFzU6nJ|yx9zOp{v{Fa~5+R2bPIytVnRF;;;`Q#v3Wgi`|>iIBOmAH$^6!0E>YP4&$5u+}KtAYh_y;UaUOg_hw#3iroRWLN|9=BF}lzaPr%v{dQ!EWU!k`F*UD=u0x z#O1-2$Ew_h+uGm|Wt(oq4R8_+6DT1jLNGQO@p&wRoIw+DxA-a)q^3@NQ(dVMIB_H1 zM7HcMbO;9Ao=4N{-Yoctyip zCK62W>3iFeZTw(gZ>zy})qF-Sg2xpLuIhRM@pkafc^3TVErmv-#zbDczkk;tGja&v z>!qoHx3=cKzaoTIz3a`wR`U^4K9)&aTB;s7hP&e;8#cqxnhiR?+xrIU$7Je%8S9{@ zEtE?#(aluCVz6@Z(1o>0ld&-SdWp1X(_Ff;(}#TK?2XRuvtU|;S&om9wflN0{O}6# zs(_-&1xCLPn3Bh|N22Ps7xaj1SUVTUDa`xLNPei%^WT{7cL?&|m~S96C;Q(xY_9)C zD+AvF*8gu5ExklJhY%)&@bd=@e)ovz_|#fy7^`Cj{M-DxXAsG3hB+9eJm{C_oz~+b z0syju{u-ye``Kq63yqP@{z`A%ubQRc3|DMap{R^YQ3Vioi{4Mt4s3|}roh&%RE*N8 z3@uhfQz9o9t$wHuO1}7e00_Vb9yi1dYuPWyC-t%7PJlCChZxHa9#>BGj`{wZk?@G} zMfbeZR`nWx_%jzjN4#Rmd2oQ#BrcW!6+%cyp5xAopXysK>7pSq9 z@H1f`yP+i8*>qY`mkDd{`*Nl+`L`5Rjim{;I%D;L^%~h{XL_k7nzM?6Zls@4@B{~^ z3x}FkFLz#LHZV@AM~Ou^v#yo>PkfgRrC+XpgK-R$t^fD9{TYmZ3>*s!=ikEyd`HIr zjWYiW+x`x|7d3M+akg@Fb#Q)%s{g^`%NyCff$N2ZMI=;(XyvW!jNM#RjO=CUmCY>N z{xY&PvUo$z|FeMbUnqNeAO|aeo|%*F9fHmb;9_I>2iRW9)yUS$M9AL4)(pV(r<9P3 z$vas8&E${x-iUYkz3?A}h>@eDnU#g*|Cp$_n%SuXIR7gCE=c|@y!YY_ByR?IhtdBl ztp1%w@ZTN&Q@@IvvFjfS!FwS70?P{A{Sf0y{vHkNnId+y(5 z-tPaj{O$UOh4IFwa8R?idZ%#$-rp+!I(Yy6w7#=FT>ivL#>(_PQt#fC|HB2uKD*r=l@pLvbhhqW&S>c%ec>vhi*jU&A=77I+KvqtUw}`wS0Q-OF z-e?|gl$QU{0l7HeLj3P`OiaKx{?5PafLv^E)8*fEKvq`fw@2#VbWF@FO#fxa^2Rv% z4?7?W2kU?O0I~wv|I3aQ$oa;&`8OXxRxXzR^b2HTdV72P)6Uh|=xu^K{~-mdSb3Yh x$LjrUrR?DFHt2uRY2IZid-J!k{qtP>MR+lCcKs7wARCa09gdt_OhFv({{V$bLXrRg diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h.tex b/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h.tex deleted file mode 100644 index 46a8552..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h.tex +++ /dev/null @@ -1,406 +0,0 @@ -\hypertarget{monitor_8h}{}\section{monitor.\+h File Reference} -\label{monitor_8h}\index{monitor.\+h@{monitor.\+h}} - - -Library for sending message to monitor or receiving message. - - -{\ttfamily \#include $<$sys/types.\+h$>$}\newline -{\ttfamily \#include $<$sys/socket.\+h$>$}\newline -{\ttfamily \#include $<$netinet/in.\+h$>$}\newline -{\ttfamily \#include $<$arpa/inet.\+h$>$}\newline -{\ttfamily \#include $<$unistd.\+h$>$}\newline -{\ttfamily \#include $<$signal.\+h$>$}\newline -{\ttfamily \#include $<$stdlib.\+h$>$}\newline -{\ttfamily \#include $<$stdio.\+h$>$}\newline -{\ttfamily \#include $<$string.\+h$>$}\newline -{\ttfamily \#include \char`\"{}image.\+h\char`\"{}}\newline -{\ttfamily \#include \char`\"{}definitions.\+h\char`\"{}}\newline -Include dependency graph for monitor.\+h\+:\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=350pt]{monitor_8h__incl} -\end{center} -\end{figure} -\subsection*{Classes} -\begin{DoxyCompactItemize} -\item -struct \hyperlink{struct_message_from_mon}{Message\+From\+Mon} -\end{DoxyCompactItemize} -\subsection*{Macros} -\begin{DoxyCompactItemize} -\item -\#define \hyperlink{monitor_8h_ad62b697bd25a71d171db46740aef2830}{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+I\+M\+A\+GE}~\char`\"{}I\+MG\char`\"{} -\item -\#define \hyperlink{monitor_8h_a0de226ae5af8b83f3b163ff4413eef95}{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+B\+AT}~\char`\"{}B\+AT\char`\"{} -\item -\#define \hyperlink{monitor_8h_a6a07aae2539981459edc8070a0f019db}{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+P\+OS}~\char`\"{}P\+OS\char`\"{} -\item -\#define \hyperlink{monitor_8h_ac2e64478522da4e3b45c139c0c72557f}{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+N\+O\+\_\+\+A\+CK}~\char`\"{}N\+AK\char`\"{} -\item -\#define \hyperlink{monitor_8h_af2325d19ae9da4310eb608c744149f53}{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+A\+CK}~\char`\"{}A\+CK\char`\"{} -\item -\#define \hyperlink{monitor_8h_ac1034bccb09918cccd3ba142377a6788}{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+M\+ES}~\char`\"{}M\+SG\char`\"{} -\item -\#define \hyperlink{monitor_8h_afe29ce74d16751828da8aec7e13ad06b}{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+L\+O\+S\+T\+\_\+\+D\+MB}~\char`\"{}L\+CD\char`\"{} -\item -\#define \hyperlink{monitor_8h_a980e8f9457e30018fddcd4d997f17a85}{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+M\+SG}~\char`\"{}M\+SG\char`\"{} -\item -\#define \hyperlink{monitor_8h_a5ccd30e6502bb94eaa13a597edb1f156}{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+D\+M\+B\+\_\+\+O\+R\+D\+ER}~\char`\"{}D\+MB\char`\"{} -\item -\#define \hyperlink{monitor_8h_a0c829d92889c5c9b2d485964ce933fab}{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+O\+M\+\_\+\+D\+MB}~\char`\"{}C\+OM\char`\"{} -\item -\#define \hyperlink{monitor_8h_a91e2658cf20010646211ba748885c180}{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+A\+M\+E\+RA}~\char`\"{}C\+AM\char`\"{} -\item -\#define \hyperlink{monitor_8h_a2be30c9a3e65eaf5502b8542a6ac6259}{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+S\+T\+OP}~\char`\"{}S\+TO\char`\"{} -\item -\#define \hyperlink{monitor_8h_a26769957ec1a2beaf223f33b66ee64ab}{I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+O\+C\+K\+ET}~-\/1 -\item -\#define \hyperlink{monitor_8h_a633b0396ff93d336a088412a190a5072}{S\+O\+C\+K\+E\+T\+\_\+\+E\+R\+R\+OR}~-\/1 -\item -\#define \hyperlink{monitor_8h_a16b710f592bf8f7900666392adc444dc}{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+O\+RT}~8080 -\item -\#define \hyperlink{monitor_8h_a939612a13947b5bb9fc848e3222a231d}{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+A\+R\+I\+TY}~0 -\item -\#define \hyperlink{monitor_8h_ab3be9ae187e8b98bb000ca0bca68e982}{D\+E\+T\+E\+C\+T\+\_\+\+A\+R\+E\+NA}~(1) -\item -\#define \hyperlink{monitor_8h_a22d20ac264e03c59d6941cb11386aa89}{C\+H\+E\+C\+K\+\_\+\+A\+R\+E\+NA}~(2) -\item -\#define \hyperlink{monitor_8h_a1d58e03abc2a587c7f0a0665c94c0e68}{N\+O\+\_\+\+A\+R\+E\+NA}~(3) -\item -\#define \hyperlink{monitor_8h_a2c47b710f0858fe41c544517c6b2a2fd}{D\+E\+F\+A\+U\+L\+T\+\_\+\+N\+O\+D\+E\+J\+S\+\_\+\+P\+A\+TH}~\char`\"{}/usr/bin/nodejs\char`\"{} -\item -\#define \hyperlink{monitor_8h_af533d8bd7d6a1d9f9efba3b259280e32}{D\+E\+F\+A\+U\+L\+T\+\_\+\+I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+F\+I\+LE}~\char`\"{}./interface.\+js\char`\"{} -\item -\#define \hyperlink{monitor_8h_ab6b45251e218af8f09c5d627b5262398}{closesocket}(param)~close(param) -\end{DoxyCompactItemize} -\subsection*{Typedefs} -\begin{DoxyCompactItemize} -\item -typedef int \hyperlink{monitor_8h_a8dc8083897335125630f1af5dafd5831}{S\+O\+C\+K\+ET} -\item -typedef struct sockaddr\+\_\+in \hyperlink{monitor_8h_a29046dc0232f0e5c70adbc25090d77b8}{S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN} -\item -typedef struct sockaddr \hyperlink{monitor_8h_ae334b73cedf7204187dce3f817576009}{S\+O\+C\+K\+A\+D\+DR} -\end{DoxyCompactItemize} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -int \hyperlink{monitor_8h_ac3d876b96642b6ee46f6a96b7ffcb864}{send\+\_\+message\+\_\+to\+\_\+monitor} (const char $\ast$type\+Message, const void $\ast$data=N\+U\+LL) -\begin{DoxyCompactList}\small\item\em Envoi d\textquotesingle{}un message vers l\textquotesingle{}interface graphique. \end{DoxyCompactList}\item -int \hyperlink{monitor_8h_a61eca0d5b49118350db39583e1bd1032}{receive\+\_\+message\+\_\+from\+\_\+monitor} (char $\ast$type\+Message, char $\ast$data) -\begin{DoxyCompactList}\small\item\em Réception d\textquotesingle{}un message. La fonction est bloquante et retourne par référence le type de message reçu (D\+MB pour un ordre au robot, A\+RN pour la détection des arènes et P\+OS pour un calcul de position) ainsi que les données associées. \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Library for sending message to monitor or receiving message. - -\begin{DoxyAuthor}{Author} -L.\+senaneuch -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} - - -\subsection{Macro Definition Documentation} -\mbox{\Hypertarget{monitor_8h_a22d20ac264e03c59d6941cb11386aa89}\label{monitor_8h_a22d20ac264e03c59d6941cb11386aa89}} -\index{monitor.\+h@{monitor.\+h}!C\+H\+E\+C\+K\+\_\+\+A\+R\+E\+NA@{C\+H\+E\+C\+K\+\_\+\+A\+R\+E\+NA}} -\index{C\+H\+E\+C\+K\+\_\+\+A\+R\+E\+NA@{C\+H\+E\+C\+K\+\_\+\+A\+R\+E\+NA}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{C\+H\+E\+C\+K\+\_\+\+A\+R\+E\+NA}{CHECK\_ARENA}} -{\footnotesize\ttfamily \#define C\+H\+E\+C\+K\+\_\+\+A\+R\+E\+NA~(2)} - - - -Definition at line 62 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_ab6b45251e218af8f09c5d627b5262398}\label{monitor_8h_ab6b45251e218af8f09c5d627b5262398}} -\index{monitor.\+h@{monitor.\+h}!closesocket@{closesocket}} -\index{closesocket@{closesocket}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{closesocket}{closesocket}} -{\footnotesize\ttfamily \#define closesocket(\begin{DoxyParamCaption}\item[{}]{param }\end{DoxyParamCaption})~close(param)} - - - -Definition at line 68 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_af533d8bd7d6a1d9f9efba3b259280e32}\label{monitor_8h_af533d8bd7d6a1d9f9efba3b259280e32}} -\index{monitor.\+h@{monitor.\+h}!D\+E\+F\+A\+U\+L\+T\+\_\+\+I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+F\+I\+LE@{D\+E\+F\+A\+U\+L\+T\+\_\+\+I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+F\+I\+LE}} -\index{D\+E\+F\+A\+U\+L\+T\+\_\+\+I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+F\+I\+LE@{D\+E\+F\+A\+U\+L\+T\+\_\+\+I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+F\+I\+LE}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{D\+E\+F\+A\+U\+L\+T\+\_\+\+I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+F\+I\+LE}{DEFAULT\_INTERFACE\_FILE}} -{\footnotesize\ttfamily \#define D\+E\+F\+A\+U\+L\+T\+\_\+\+I\+N\+T\+E\+R\+F\+A\+C\+E\+\_\+\+F\+I\+LE~\char`\"{}./interface.\+js\char`\"{}} - - - -Definition at line 66 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a2c47b710f0858fe41c544517c6b2a2fd}\label{monitor_8h_a2c47b710f0858fe41c544517c6b2a2fd}} -\index{monitor.\+h@{monitor.\+h}!D\+E\+F\+A\+U\+L\+T\+\_\+\+N\+O\+D\+E\+J\+S\+\_\+\+P\+A\+TH@{D\+E\+F\+A\+U\+L\+T\+\_\+\+N\+O\+D\+E\+J\+S\+\_\+\+P\+A\+TH}} -\index{D\+E\+F\+A\+U\+L\+T\+\_\+\+N\+O\+D\+E\+J\+S\+\_\+\+P\+A\+TH@{D\+E\+F\+A\+U\+L\+T\+\_\+\+N\+O\+D\+E\+J\+S\+\_\+\+P\+A\+TH}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{D\+E\+F\+A\+U\+L\+T\+\_\+\+N\+O\+D\+E\+J\+S\+\_\+\+P\+A\+TH}{DEFAULT\_NODEJS\_PATH}} -{\footnotesize\ttfamily \#define D\+E\+F\+A\+U\+L\+T\+\_\+\+N\+O\+D\+E\+J\+S\+\_\+\+P\+A\+TH~\char`\"{}/usr/bin/nodejs\char`\"{}} - - - -Definition at line 65 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a939612a13947b5bb9fc848e3222a231d}\label{monitor_8h_a939612a13947b5bb9fc848e3222a231d}} -\index{monitor.\+h@{monitor.\+h}!D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+A\+R\+I\+TY@{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+A\+R\+I\+TY}} -\index{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+A\+R\+I\+TY@{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+A\+R\+I\+TY}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+A\+R\+I\+TY}{DEFAULT\_PARITY}} -{\footnotesize\ttfamily \#define D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+A\+R\+I\+TY~0} - - - -Definition at line 59 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a16b710f592bf8f7900666392adc444dc}\label{monitor_8h_a16b710f592bf8f7900666392adc444dc}} -\index{monitor.\+h@{monitor.\+h}!D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+O\+RT@{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+O\+RT}} -\index{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+O\+RT@{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+O\+RT}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+O\+RT}{DEFAULT\_PORT}} -{\footnotesize\ttfamily \#define D\+E\+F\+A\+U\+L\+T\+\_\+\+P\+O\+RT~8080} - - - -Definition at line 58 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_ab3be9ae187e8b98bb000ca0bca68e982}\label{monitor_8h_ab3be9ae187e8b98bb000ca0bca68e982}} -\index{monitor.\+h@{monitor.\+h}!D\+E\+T\+E\+C\+T\+\_\+\+A\+R\+E\+NA@{D\+E\+T\+E\+C\+T\+\_\+\+A\+R\+E\+NA}} -\index{D\+E\+T\+E\+C\+T\+\_\+\+A\+R\+E\+NA@{D\+E\+T\+E\+C\+T\+\_\+\+A\+R\+E\+NA}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{D\+E\+T\+E\+C\+T\+\_\+\+A\+R\+E\+NA}{DETECT\_ARENA}} -{\footnotesize\ttfamily \#define D\+E\+T\+E\+C\+T\+\_\+\+A\+R\+E\+NA~(1)} - - - -Definition at line 61 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a91e2658cf20010646211ba748885c180}\label{monitor_8h_a91e2658cf20010646211ba748885c180}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+A\+M\+E\+RA@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+A\+M\+E\+RA}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+A\+M\+E\+RA@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+A\+M\+E\+RA}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+A\+M\+E\+RA}{HEADER\_MTS\_CAMERA}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+A\+M\+E\+RA~\char`\"{}C\+AM\char`\"{}} - - - -Definition at line 52 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a0c829d92889c5c9b2d485964ce933fab}\label{monitor_8h_a0c829d92889c5c9b2d485964ce933fab}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+O\+M\+\_\+\+D\+MB@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+O\+M\+\_\+\+D\+MB}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+O\+M\+\_\+\+D\+MB@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+O\+M\+\_\+\+D\+MB}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+O\+M\+\_\+\+D\+MB}{HEADER\_MTS\_COM\_DMB}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+C\+O\+M\+\_\+\+D\+MB~\char`\"{}C\+OM\char`\"{}} - - - -Definition at line 51 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a5ccd30e6502bb94eaa13a597edb1f156}\label{monitor_8h_a5ccd30e6502bb94eaa13a597edb1f156}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+D\+M\+B\+\_\+\+O\+R\+D\+ER@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+D\+M\+B\+\_\+\+O\+R\+D\+ER}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+D\+M\+B\+\_\+\+O\+R\+D\+ER@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+D\+M\+B\+\_\+\+O\+R\+D\+ER}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+D\+M\+B\+\_\+\+O\+R\+D\+ER}{HEADER\_MTS\_DMB\_ORDER}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+D\+M\+B\+\_\+\+O\+R\+D\+ER~\char`\"{}D\+MB\char`\"{}} - - - -Definition at line 50 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a980e8f9457e30018fddcd4d997f17a85}\label{monitor_8h_a980e8f9457e30018fddcd4d997f17a85}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+M\+SG@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+M\+SG}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+M\+SG@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+M\+SG}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+M\+SG}{HEADER\_MTS\_MSG}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+M\+SG~\char`\"{}M\+SG\char`\"{}} - - - -Definition at line 49 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a2be30c9a3e65eaf5502b8542a6ac6259}\label{monitor_8h_a2be30c9a3e65eaf5502b8542a6ac6259}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+S\+T\+OP@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+S\+T\+OP}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+S\+T\+OP@{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+S\+T\+OP}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+S\+T\+OP}{HEADER\_MTS\_STOP}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+M\+T\+S\+\_\+\+S\+T\+OP~\char`\"{}S\+TO\char`\"{}} - - - -Definition at line 53 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_af2325d19ae9da4310eb608c744149f53}\label{monitor_8h_af2325d19ae9da4310eb608c744149f53}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+A\+CK@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+A\+CK}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+A\+CK@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+A\+CK}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+A\+CK}{HEADER\_STM\_ACK}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+A\+CK~\char`\"{}A\+CK\char`\"{}} - - - -Definition at line 45 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a0de226ae5af8b83f3b163ff4413eef95}\label{monitor_8h_a0de226ae5af8b83f3b163ff4413eef95}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+B\+AT@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+B\+AT}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+B\+AT@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+B\+AT}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+B\+AT}{HEADER\_STM\_BAT}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+B\+AT~\char`\"{}B\+AT\char`\"{}} - - - -Definition at line 42 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_ad62b697bd25a71d171db46740aef2830}\label{monitor_8h_ad62b697bd25a71d171db46740aef2830}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+I\+M\+A\+GE@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+I\+M\+A\+GE}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+I\+M\+A\+GE@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+I\+M\+A\+GE}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+I\+M\+A\+GE}{HEADER\_STM\_IMAGE}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+I\+M\+A\+GE~\char`\"{}I\+MG\char`\"{}} - - - -Definition at line 41 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_afe29ce74d16751828da8aec7e13ad06b}\label{monitor_8h_afe29ce74d16751828da8aec7e13ad06b}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+L\+O\+S\+T\+\_\+\+D\+MB@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+L\+O\+S\+T\+\_\+\+D\+MB}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+L\+O\+S\+T\+\_\+\+D\+MB@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+L\+O\+S\+T\+\_\+\+D\+MB}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+L\+O\+S\+T\+\_\+\+D\+MB}{HEADER\_STM\_LOST\_DMB}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+L\+O\+S\+T\+\_\+\+D\+MB~\char`\"{}L\+CD\char`\"{}} - - - -Definition at line 47 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_ac1034bccb09918cccd3ba142377a6788}\label{monitor_8h_ac1034bccb09918cccd3ba142377a6788}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+M\+ES@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+M\+ES}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+M\+ES@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+M\+ES}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+M\+ES}{HEADER\_STM\_MES}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+M\+ES~\char`\"{}M\+SG\char`\"{}} - - - -Definition at line 46 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_ac2e64478522da4e3b45c139c0c72557f}\label{monitor_8h_ac2e64478522da4e3b45c139c0c72557f}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+N\+O\+\_\+\+A\+CK@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+N\+O\+\_\+\+A\+CK}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+N\+O\+\_\+\+A\+CK@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+N\+O\+\_\+\+A\+CK}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+N\+O\+\_\+\+A\+CK}{HEADER\_STM\_NO\_ACK}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+N\+O\+\_\+\+A\+CK~\char`\"{}N\+AK\char`\"{}} - - - -Definition at line 44 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a6a07aae2539981459edc8070a0f019db}\label{monitor_8h_a6a07aae2539981459edc8070a0f019db}} -\index{monitor.\+h@{monitor.\+h}!H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+P\+OS@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+P\+OS}} -\index{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+P\+OS@{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+P\+OS}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+P\+OS}{HEADER\_STM\_POS}} -{\footnotesize\ttfamily \#define H\+E\+A\+D\+E\+R\+\_\+\+S\+T\+M\+\_\+\+P\+OS~\char`\"{}P\+OS\char`\"{}} - - - -Definition at line 43 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a26769957ec1a2beaf223f33b66ee64ab}\label{monitor_8h_a26769957ec1a2beaf223f33b66ee64ab}} -\index{monitor.\+h@{monitor.\+h}!I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+O\+C\+K\+ET@{I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+O\+C\+K\+ET}} -\index{I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+O\+C\+K\+ET@{I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+O\+C\+K\+ET}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+O\+C\+K\+ET}{INVALID\_SOCKET}} -{\footnotesize\ttfamily \#define I\+N\+V\+A\+L\+I\+D\+\_\+\+S\+O\+C\+K\+ET~-\/1} - - - -Definition at line 55 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a1d58e03abc2a587c7f0a0665c94c0e68}\label{monitor_8h_a1d58e03abc2a587c7f0a0665c94c0e68}} -\index{monitor.\+h@{monitor.\+h}!N\+O\+\_\+\+A\+R\+E\+NA@{N\+O\+\_\+\+A\+R\+E\+NA}} -\index{N\+O\+\_\+\+A\+R\+E\+NA@{N\+O\+\_\+\+A\+R\+E\+NA}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{N\+O\+\_\+\+A\+R\+E\+NA}{NO\_ARENA}} -{\footnotesize\ttfamily \#define N\+O\+\_\+\+A\+R\+E\+NA~(3)} - - - -Definition at line 63 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a633b0396ff93d336a088412a190a5072}\label{monitor_8h_a633b0396ff93d336a088412a190a5072}} -\index{monitor.\+h@{monitor.\+h}!S\+O\+C\+K\+E\+T\+\_\+\+E\+R\+R\+OR@{S\+O\+C\+K\+E\+T\+\_\+\+E\+R\+R\+OR}} -\index{S\+O\+C\+K\+E\+T\+\_\+\+E\+R\+R\+OR@{S\+O\+C\+K\+E\+T\+\_\+\+E\+R\+R\+OR}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{S\+O\+C\+K\+E\+T\+\_\+\+E\+R\+R\+OR}{SOCKET\_ERROR}} -{\footnotesize\ttfamily \#define S\+O\+C\+K\+E\+T\+\_\+\+E\+R\+R\+OR~-\/1} - - - -Definition at line 56 of file monitor.\+h. - - - -\subsection{Typedef Documentation} -\mbox{\Hypertarget{monitor_8h_ae334b73cedf7204187dce3f817576009}\label{monitor_8h_ae334b73cedf7204187dce3f817576009}} -\index{monitor.\+h@{monitor.\+h}!S\+O\+C\+K\+A\+D\+DR@{S\+O\+C\+K\+A\+D\+DR}} -\index{S\+O\+C\+K\+A\+D\+DR@{S\+O\+C\+K\+A\+D\+DR}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{S\+O\+C\+K\+A\+D\+DR}{SOCKADDR}} -{\footnotesize\ttfamily typedef struct sockaddr \hyperlink{monitor_8h_ae334b73cedf7204187dce3f817576009}{S\+O\+C\+K\+A\+D\+DR}} - - - -Definition at line 72 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a29046dc0232f0e5c70adbc25090d77b8}\label{monitor_8h_a29046dc0232f0e5c70adbc25090d77b8}} -\index{monitor.\+h@{monitor.\+h}!S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN@{S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN}} -\index{S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN@{S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN}{SOCKADDR\_IN}} -{\footnotesize\ttfamily typedef struct sockaddr\+\_\+in \hyperlink{monitor_8h_a29046dc0232f0e5c70adbc25090d77b8}{S\+O\+C\+K\+A\+D\+D\+R\+\_\+\+IN}} - - - -Definition at line 71 of file monitor.\+h. - -\mbox{\Hypertarget{monitor_8h_a8dc8083897335125630f1af5dafd5831}\label{monitor_8h_a8dc8083897335125630f1af5dafd5831}} -\index{monitor.\+h@{monitor.\+h}!S\+O\+C\+K\+ET@{S\+O\+C\+K\+ET}} -\index{S\+O\+C\+K\+ET@{S\+O\+C\+K\+ET}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{S\+O\+C\+K\+ET}{SOCKET}} -{\footnotesize\ttfamily typedef int \hyperlink{monitor_8h_a8dc8083897335125630f1af5dafd5831}{S\+O\+C\+K\+ET}} - - - -Definition at line 70 of file monitor.\+h. - - - -\subsection{Function Documentation} -\mbox{\Hypertarget{monitor_8h_a61eca0d5b49118350db39583e1bd1032}\label{monitor_8h_a61eca0d5b49118350db39583e1bd1032}} -\index{monitor.\+h@{monitor.\+h}!receive\+\_\+message\+\_\+from\+\_\+monitor@{receive\+\_\+message\+\_\+from\+\_\+monitor}} -\index{receive\+\_\+message\+\_\+from\+\_\+monitor@{receive\+\_\+message\+\_\+from\+\_\+monitor}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{receive\+\_\+message\+\_\+from\+\_\+monitor()}{receive\_message\_from\_monitor()}} -{\footnotesize\ttfamily int receive\+\_\+message\+\_\+from\+\_\+monitor (\begin{DoxyParamCaption}\item[{char $\ast$}]{type\+Message, }\item[{char $\ast$}]{data }\end{DoxyParamCaption})} - - - -Réception d\textquotesingle{}un message. La fonction est bloquante et retourne par référence le type de message reçu (D\+MB pour un ordre au robot, A\+RN pour la détection des arènes et P\+OS pour un calcul de position) ainsi que les données associées. - - -\begin{DoxyParams}{Parameters} -{\em type\+Message} & Type du message reçu \+: D\+MB pour un ordre au robot, A\+RN pour la demande de détection de l\textquotesingle{}arène, P\+OS pour un calcul de position et M\+SG pour un message de l\textquotesingle{}interface \\ -\hline -{\em data} & données associées au message reçu. \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne 0 la taille du message reçu ou une valeur négative si la connexion est perdue. -\end{DoxyReturn} -\mbox{\Hypertarget{monitor_8h_ac3d876b96642b6ee46f6a96b7ffcb864}\label{monitor_8h_ac3d876b96642b6ee46f6a96b7ffcb864}} -\index{monitor.\+h@{monitor.\+h}!send\+\_\+message\+\_\+to\+\_\+monitor@{send\+\_\+message\+\_\+to\+\_\+monitor}} -\index{send\+\_\+message\+\_\+to\+\_\+monitor@{send\+\_\+message\+\_\+to\+\_\+monitor}!monitor.\+h@{monitor.\+h}} -\subsubsection{\texorpdfstring{send\+\_\+message\+\_\+to\+\_\+monitor()}{send\_message\_to\_monitor()}} -{\footnotesize\ttfamily int send\+\_\+message\+\_\+to\+\_\+monitor (\begin{DoxyParamCaption}\item[{const char $\ast$}]{type\+Message, }\item[{const void $\ast$}]{data = {\ttfamily NULL} }\end{DoxyParamCaption})} - - - -Envoi d\textquotesingle{}un message vers l\textquotesingle{}interface graphique. - - -\begin{DoxyParams}{Parameters} -{\em type\+Message} & Type du message envoyé. Les valeurs possibles sont I\+MG pour une image, M\+ES pour un message à afficher dans la console, P\+OS pour la position du robot, B\+AT pour une valeur de la batterie et A\+CK pour valider un message de l\textquotesingle{}interface. \\ -\hline -{\em data} & données associées au message. Le type de la donnée doit correspondre au message \+: Image pour I\+MG, char $\ast$ M\+ES, \hyperlink{struct_position}{Position} pour P\+OS, char $\ast$ pour B\+AT et rien pour A\+CK. Attention, il n\textquotesingle{}y a aucune vérification a posterio. \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne 0 si l\textquotesingle{}envoie a bien été réalisé et -\/1 en cas de problème. -\end{DoxyReturn} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__dep__incl.md5 deleted file mode 100644 index 03d3478..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -77c1bdf6c74a578f1a45f5d60ed69fae \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__dep__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__dep__incl.pdf deleted file mode 100644 index 32318dca4f7cec74e61cd822153216ff3df5c236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11469 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__incl.md5 deleted file mode 100644 index 76bcecc..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -592d30edf156f19615e71d4acb9433b5 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/monitor_8h__incl.pdf deleted file mode 100644 index 82b19bf9cfe1da719b3cac8e14b00ebe23d43eb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15244 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 V^x5xhq=1STJYD@<);T3K0RU%2e#-y= diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp.tex b/software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp.tex deleted file mode 100644 index a94ed27..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp.tex +++ /dev/null @@ -1,175 +0,0 @@ -\hypertarget{robot_8cpp}{}\section{src/robot.cpp File Reference} -\label{robot_8cpp}\index{src/robot.\+cpp@{src/robot.\+cpp}} -{\ttfamily \#include \char`\"{}robot.\+h\char`\"{}}\newline -Include dependency graph for robot.\+cpp\+: -\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=350pt]{robot_8cpp__incl} -\end{center} -\end{figure} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -int \hyperlink{robot_8cpp_a116eceb372bf4bda7e6a360286e762b1}{get\+Char} (char $\ast$c) -\item -int \hyperlink{robot_8cpp_a2e1339c58b604c970f67096c7d143c2a}{read\+Serial} (char $\ast$msg) -\item -char \hyperlink{robot_8cpp_ab87123df26d91967d4d7507ad10326ac}{check\+Sum\+GO} (char $\ast$msg) -\item -int \hyperlink{robot_8cpp_adf885bd17005f841896acf2e49350db7}{receive\+Msg} (void) -\item -int \hyperlink{robot_8cpp_ac9d64c6d05c20ae9fdb8c158e2ee7098}{send\+Cmd} (char cmd, const char $\ast$arg) -\item -int \hyperlink{robot_8cpp_a9360e75fe324da14faaa87105771140e}{open\+\_\+communication\+\_\+robot} (const char $\ast$path) -\begin{DoxyCompactList}\small\item\em Ouvre la communication avec le robot. \end{DoxyCompactList}\item -int \hyperlink{robot_8cpp_a3fbce7530a62f9287f8a3b85b9c7e4d7}{close\+\_\+communication\+\_\+robot} (void) -\begin{DoxyCompactList}\small\item\em Ferme la communication avec le robot. \end{DoxyCompactList}\item -int \hyperlink{robot_8cpp_a68c01c5d6226d21fc0d141f681806677}{send\+\_\+command\+\_\+to\+\_\+robot} (char cmd, const char $\ast$arg) -\begin{DoxyCompactList}\small\item\em Envoi une commande au robot et attends sa réponse. \end{DoxyCompactList}\end{DoxyCompactItemize} -\subsection*{Variables} -\begin{DoxyCompactItemize} -\item -int \hyperlink{robot_8cpp_a6f8059414f0228f0256115e024eeed4b}{fd} -\end{DoxyCompactItemize} - - -\subsection{Function Documentation} -\mbox{\Hypertarget{robot_8cpp_ab87123df26d91967d4d7507ad10326ac}\label{robot_8cpp_ab87123df26d91967d4d7507ad10326ac}} -\index{robot.\+cpp@{robot.\+cpp}!check\+Sum\+GO@{check\+Sum\+GO}} -\index{check\+Sum\+GO@{check\+Sum\+GO}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{check\+Sum\+G\+O()}{checkSumGO()}} -{\footnotesize\ttfamily char check\+Sum\+GO (\begin{DoxyParamCaption}\item[{char $\ast$}]{msg }\end{DoxyParamCaption})} - - - -Definition at line 237 of file robot.\+cpp. - -\mbox{\Hypertarget{robot_8cpp_a3fbce7530a62f9287f8a3b85b9c7e4d7}\label{robot_8cpp_a3fbce7530a62f9287f8a3b85b9c7e4d7}} -\index{robot.\+cpp@{robot.\+cpp}!close\+\_\+communication\+\_\+robot@{close\+\_\+communication\+\_\+robot}} -\index{close\+\_\+communication\+\_\+robot@{close\+\_\+communication\+\_\+robot}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{close\+\_\+communication\+\_\+robot()}{close\_communication\_robot()}} -{\footnotesize\ttfamily int close\+\_\+communication\+\_\+robot (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} - - - -Ferme la communication avec le robot. - -Ferme le descripteur de fichier du port serie contrôlant le robot. - - -\begin{DoxyParams}{Parameters} -{\em void} & aucun \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne -\/1 en cas d\textquotesingle{}erreur ou 0 en cas de fermeture effectué -\end{DoxyReturn} - - -Definition at line 64 of file robot.\+cpp. - -\mbox{\Hypertarget{robot_8cpp_a116eceb372bf4bda7e6a360286e762b1}\label{robot_8cpp_a116eceb372bf4bda7e6a360286e762b1}} -\index{robot.\+cpp@{robot.\+cpp}!get\+Char@{get\+Char}} -\index{get\+Char@{get\+Char}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{get\+Char()}{getChar()}} -{\footnotesize\ttfamily int get\+Char (\begin{DoxyParamCaption}\item[{char $\ast$}]{c }\end{DoxyParamCaption})} - - - -Definition at line 199 of file robot.\+cpp. - -\mbox{\Hypertarget{robot_8cpp_a9360e75fe324da14faaa87105771140e}\label{robot_8cpp_a9360e75fe324da14faaa87105771140e}} -\index{robot.\+cpp@{robot.\+cpp}!open\+\_\+communication\+\_\+robot@{open\+\_\+communication\+\_\+robot}} -\index{open\+\_\+communication\+\_\+robot@{open\+\_\+communication\+\_\+robot}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{open\+\_\+communication\+\_\+robot()}{open\_communication\_robot()}} -{\footnotesize\ttfamily int open\+\_\+communication\+\_\+robot (\begin{DoxyParamCaption}\item[{const char $\ast$}]{path = {\ttfamily \hyperlink{robot_8h_a32c8768c18732c59b503f8ee7515a693}{serial\+Port}} }\end{DoxyParamCaption})} - - - -Ouvre la communication avec le robot. - -Ouvre le serial port passé en paramétre. Par defaut cette fonction ouvre le port tty\+SO connecté au module xbee. - - -\begin{DoxyParams}{Parameters} -{\em $\ast$path} & chaine de caractère indiquant le path du port serie à ouvrir. \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Return -\/1 si l\textquotesingle{}ouverture c\textquotesingle{}est mal passé et 0 si le port est ouvert. -\end{DoxyReturn} - - -Definition at line 36 of file robot.\+cpp. - -\mbox{\Hypertarget{robot_8cpp_a2e1339c58b604c970f67096c7d143c2a}\label{robot_8cpp_a2e1339c58b604c970f67096c7d143c2a}} -\index{robot.\+cpp@{robot.\+cpp}!read\+Serial@{read\+Serial}} -\index{read\+Serial@{read\+Serial}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{read\+Serial()}{readSerial()}} -{\footnotesize\ttfamily int read\+Serial (\begin{DoxyParamCaption}\item[{char $\ast$}]{msg }\end{DoxyParamCaption})} - - - -Definition at line 216 of file robot.\+cpp. - -\mbox{\Hypertarget{robot_8cpp_adf885bd17005f841896acf2e49350db7}\label{robot_8cpp_adf885bd17005f841896acf2e49350db7}} -\index{robot.\+cpp@{robot.\+cpp}!receive\+Msg@{receive\+Msg}} -\index{receive\+Msg@{receive\+Msg}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{receive\+Msg()}{receiveMsg()}} -{\footnotesize\ttfamily int receive\+Msg (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} - - - -Definition at line 168 of file robot.\+cpp. - -\mbox{\Hypertarget{robot_8cpp_a68c01c5d6226d21fc0d141f681806677}\label{robot_8cpp_a68c01c5d6226d21fc0d141f681806677}} -\index{robot.\+cpp@{robot.\+cpp}!send\+\_\+command\+\_\+to\+\_\+robot@{send\+\_\+command\+\_\+to\+\_\+robot}} -\index{send\+\_\+command\+\_\+to\+\_\+robot@{send\+\_\+command\+\_\+to\+\_\+robot}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{send\+\_\+command\+\_\+to\+\_\+robot()}{send\_command\_to\_robot()}} -{\footnotesize\ttfamily int send\+\_\+command\+\_\+to\+\_\+robot (\begin{DoxyParamCaption}\item[{char}]{cmd, }\item[{const char $\ast$}]{arg = {\ttfamily NULL} }\end{DoxyParamCaption})} - - - -Envoi une commande au robot et attends sa réponse. - -Envoi une commande au robot en ajoutant le checksum et lis la réponse du robot en verifiant le checksum. Le premier paramétre {\itshape cmd} correspond au type de commande ex \+: P\+I\+NG, S\+E\+T\+M\+O\+VE ... Le second paramétre {\itshape $\ast$arg} correspond aux arguments à la commande ex \+: S\+E\+T\+M\+O\+VE, \char`\"{}100\char`\"{} La fonction retourne un code confirmation transmise par le robot (R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+K\+S\+UM, R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR, R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT, R\+O\+B\+O\+T\+\_\+\+OK, R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+\_\+\+C\+MD) - - -\begin{DoxyParams}{Parameters} -{\em cmd} & Entête de la commande \\ -\hline -{\em $\ast$arg} & Argument de la commande \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -retourne un code confirmation. -\end{DoxyReturn} - - -Definition at line 74 of file robot.\+cpp. - -\mbox{\Hypertarget{robot_8cpp_ac9d64c6d05c20ae9fdb8c158e2ee7098}\label{robot_8cpp_ac9d64c6d05c20ae9fdb8c158e2ee7098}} -\index{robot.\+cpp@{robot.\+cpp}!send\+Cmd@{send\+Cmd}} -\index{send\+Cmd@{send\+Cmd}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{send\+Cmd()}{sendCmd()}} -{\footnotesize\ttfamily int send\+Cmd (\begin{DoxyParamCaption}\item[{char}]{cmd, }\item[{const char $\ast$}]{arg }\end{DoxyParamCaption})} - - - -Definition at line 138 of file robot.\+cpp. - - - -\subsection{Variable Documentation} -\mbox{\Hypertarget{robot_8cpp_a6f8059414f0228f0256115e024eeed4b}\label{robot_8cpp_a6f8059414f0228f0256115e024eeed4b}} -\index{robot.\+cpp@{robot.\+cpp}!fd@{fd}} -\index{fd@{fd}!robot.\+cpp@{robot.\+cpp}} -\subsubsection{\texorpdfstring{fd}{fd}} -{\footnotesize\ttfamily int fd} - - - -Definition at line 28 of file robot.\+cpp. - diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp__incl.md5 deleted file mode 100644 index 88b33a0..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9b311009597edbb2eaa19d2f19cdbeff \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/robot_8cpp__incl.pdf deleted file mode 100644 index e18f0a4739880dcdd371e6a7b6a2e94e0db3b4dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13591 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\newline -{\ttfamily \#include $<$unistd.\+h$>$}\newline -{\ttfamily \#include $<$fcntl.\+h$>$}\newline -{\ttfamily \#include $<$termios.\+h$>$}\newline -{\ttfamily \#include $<$string.\+h$>$}\newline -{\ttfamily \#include $<$stdlib.\+h$>$}\newline -{\ttfamily \#include \char`\"{}definitions.\+h\char`\"{}}\newline -Include dependency graph for robot.\+h\+:\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=350pt]{robot_8h__incl} -\end{center} -\end{figure} -\subsection*{Classes} -\begin{DoxyCompactItemize} -\item -struct \hyperlink{struct_message_to_robot}{Message\+To\+Robot} -\end{DoxyCompactItemize} -\subsection*{Macros} -\begin{DoxyCompactItemize} -\item -\#define \hyperlink{robot_8h_a32c8768c18732c59b503f8ee7515a693}{serial\+Port}~\char`\"{}/dev/tty\+S0\char`\"{} -\end{DoxyCompactItemize} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -int \hyperlink{robot_8h_a0e70fa821a04d349552b8bd54f6935db}{open\+\_\+communication\+\_\+robot} (const char $\ast$path=\hyperlink{robot_8h_a32c8768c18732c59b503f8ee7515a693}{serial\+Port}) -\begin{DoxyCompactList}\small\item\em Ouvre la communication avec le robot. \end{DoxyCompactList}\item -int \hyperlink{robot_8h_a3fbce7530a62f9287f8a3b85b9c7e4d7}{close\+\_\+communication\+\_\+robot} (void) -\begin{DoxyCompactList}\small\item\em Ferme la communication avec le robot. \end{DoxyCompactList}\item -int \hyperlink{robot_8h_abe88fd581be321a9d86ae7063abd2f65}{send\+\_\+command\+\_\+to\+\_\+robot} (char cmd, const char $\ast$arg=N\+U\+LL) -\begin{DoxyCompactList}\small\item\em Envoi une commande au robot et attends sa réponse. \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Fonctions for communicating with robot. - -\begin{DoxyAuthor}{Author} -L.\+Senaneuch -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} - - -\subsection{Macro Definition Documentation} -\mbox{\Hypertarget{robot_8h_a32c8768c18732c59b503f8ee7515a693}\label{robot_8h_a32c8768c18732c59b503f8ee7515a693}} -\index{robot.\+h@{robot.\+h}!serial\+Port@{serial\+Port}} -\index{serial\+Port@{serial\+Port}!robot.\+h@{robot.\+h}} -\subsubsection{\texorpdfstring{serial\+Port}{serialPort}} -{\footnotesize\ttfamily \#define serial\+Port~\char`\"{}/dev/tty\+S0\char`\"{}} - - - -Definition at line 40 of file robot.\+h. - - - -\subsection{Function Documentation} -\mbox{\Hypertarget{robot_8h_a3fbce7530a62f9287f8a3b85b9c7e4d7}\label{robot_8h_a3fbce7530a62f9287f8a3b85b9c7e4d7}} -\index{robot.\+h@{robot.\+h}!close\+\_\+communication\+\_\+robot@{close\+\_\+communication\+\_\+robot}} -\index{close\+\_\+communication\+\_\+robot@{close\+\_\+communication\+\_\+robot}!robot.\+h@{robot.\+h}} -\subsubsection{\texorpdfstring{close\+\_\+communication\+\_\+robot()}{close\_communication\_robot()}} -{\footnotesize\ttfamily int close\+\_\+communication\+\_\+robot (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} - - - -Ferme la communication avec le robot. - -Ferme le descripteur de fichier du port serie contrôlant le robot. - -\begin{DoxyReturn}{Returns} -Retourne -\/1 en cas d\textquotesingle{}erreur ou 0 en cas de fermeture effectué -\end{DoxyReturn} -\mbox{\Hypertarget{robot_8h_a0e70fa821a04d349552b8bd54f6935db}\label{robot_8h_a0e70fa821a04d349552b8bd54f6935db}} -\index{robot.\+h@{robot.\+h}!open\+\_\+communication\+\_\+robot@{open\+\_\+communication\+\_\+robot}} -\index{open\+\_\+communication\+\_\+robot@{open\+\_\+communication\+\_\+robot}!robot.\+h@{robot.\+h}} -\subsubsection{\texorpdfstring{open\+\_\+communication\+\_\+robot()}{open\_communication\_robot()}} -{\footnotesize\ttfamily int open\+\_\+communication\+\_\+robot (\begin{DoxyParamCaption}\item[{const char $\ast$}]{path = {\ttfamily \hyperlink{robot_8h_a32c8768c18732c59b503f8ee7515a693}{serial\+Port}} }\end{DoxyParamCaption})} - - - -Ouvre la communication avec le robot. - -Ouvre le serial port passé en paramétre. Par defaut cette fonction ouvre le port tty\+SO connecté au module xbee. - - -\begin{DoxyParams}{Parameters} -{\em path} & Chaine de caractère contenant le path du port serie à ouvrir. \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Return -\/1 si l\textquotesingle{}ouverture c\textquotesingle{}est mal passé et 0 si le port est ouvert. -\end{DoxyReturn} -\mbox{\Hypertarget{robot_8h_abe88fd581be321a9d86ae7063abd2f65}\label{robot_8h_abe88fd581be321a9d86ae7063abd2f65}} -\index{robot.\+h@{robot.\+h}!send\+\_\+command\+\_\+to\+\_\+robot@{send\+\_\+command\+\_\+to\+\_\+robot}} -\index{send\+\_\+command\+\_\+to\+\_\+robot@{send\+\_\+command\+\_\+to\+\_\+robot}!robot.\+h@{robot.\+h}} -\subsubsection{\texorpdfstring{send\+\_\+command\+\_\+to\+\_\+robot()}{send\_command\_to\_robot()}} -{\footnotesize\ttfamily int send\+\_\+command\+\_\+to\+\_\+robot (\begin{DoxyParamCaption}\item[{char}]{cmd, }\item[{const char $\ast$}]{arg = {\ttfamily NULL} }\end{DoxyParamCaption})} - - - -Envoi une commande au robot et attends sa réponse. - -Envoi une commande au robot en ajoutant le checksum et lis la réponse du robot en verifiant le checksum. Le premier paramétre {\itshape cmd} correspond au type de commande ex \+: P\+I\+NG, S\+E\+T\+M\+O\+VE ... Le second paramétre {\itshape $\ast$arg} correspond aux arguments à la commande ex \+: S\+E\+T\+M\+O\+VE, \char`\"{}100\char`\"{} La fonction retourne un code confirmation transmise par le robot (R\+O\+B\+O\+T\+\_\+\+C\+H\+E\+K\+S\+UM, R\+O\+B\+O\+T\+\_\+\+E\+R\+R\+OR, R\+O\+B\+O\+T\+\_\+\+T\+I\+M\+E\+D\+\_\+\+O\+UT, R\+O\+B\+O\+T\+\_\+\+OK, R\+O\+B\+O\+T\+\_\+\+U\+K\+N\+O\+W\+\_\+\+C\+MD) - - -\begin{DoxyParams}{Parameters} -{\em cmd} & Entête de la commande \\ -\hline -{\em arg} & Argument de la commande \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Retourne un code confirmation. -\end{DoxyReturn} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__dep__incl.md5 deleted file mode 100644 index 46d9aca..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -3fb87047c63a0afa79355ad26788d063 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__dep__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__dep__incl.pdf deleted file mode 100644 index eb141f07344915b64cc7bed203e5122de53e6af9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11179 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__incl.md5 deleted file mode 100644 index 3b9489d..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4eb3fee89c774014764c814b6939924f \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/robot_8h__incl.pdf deleted file mode 100644 index 8afafb6c48271ad2e0bba03e896d0ba731782151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13168 zcmch;byQr-(!h%ZcX#)ogS)!~cO86!yF-8w2rj`b1Shz=ySqEVA-LOvoOAAXzk9#+ z*8A)2nb~_+O?6jSbyv??vwoXONnDZ`cwz1qI=qoE^=8Ht_CgB?$_47y#5SClB;H z^MuCy*X~CR8luwDgrB4dQDOFQzUPG0hO~|Gt+K=Ut1Y}=G!;T0^L!M%0Op05jB-0D zH)H$%VjBHG&cP}apq&Wb8r)57L;mico{1=B>VCn8{^mzi1l#x8*BB< zE94S??WC(u5f^>mab4Pu7H&%){YmZX$eM>>_!sxCJL7UAbF5a^J}yNWM9v-o?cy&u za~Irwv6c=3-uz9e+uqkE33o?fnfEJQ))|x9d%I;-ieYnILp`oO!PwwyRI!Ck`Krrt zl7veyX-&ZhX2+wsUe`99hF(p(M5dM4RSkSgd>uhE0#3&&xj+1Qrb5w8^r+&a>%r`h z8z_sg>!~ZztBVYEI2ym-D7Lj)onKxmNnpfjOG8z0A>oS729UESn4+r%A%0%}72AsJ z1-&aZFsA(7m`2GR9^5=C0ut4?VY!ar>IHa?h(5!L)depn1zu0jI&O5yco)`wN=!x~2#1xR z*1h{R+Y9G?wLH;N2`&qzFm6bhEKVnAfSGI|wCXgY77k=qz{ChgVNJ$o(M^1OR%AV^ zV>rAsu^}dHCS-De8qTKz;K&9^>XvX$acXgr7U#CTM);y3&ldwx&8k|}^j^wjc&Jdj zuj?XKAu0DZLGTrqy1%3`Pouv!(@b=dSj7?nAAjHinGdzkByuJ?5 z-Qcc`_xD5JAXV7$=XJG?#0Za1ND|thM`}dbPPUM`kQ-(|W@n+~q(85d{nGbXA*sZ4 zw)HqdY3Oaob!&uxG-ptnY z?}~c8d#lB_0(`r^mLNA9&)fHJ65GEj^-pa|xI0U!I=|K>DL?<4;`Lw#vb+kU%wi&> z08(ZX;OqIdT3^5T>&z@^XY2fL*5-^Xj4Y&_|5W>{(d+wfXRQBnM#`+_VQ)sttOT?$ zBc&n*{Bf=XbToVI3-C`{W(6}-5Kz?4omBT##X`!#!9fb(;3U=mV=eaT_to5q^lh{G zYiE&iv~#ilx3T=?JT5A$4|iG5bdnd$kfba|M~0sYr>w zDgO>t#mvdh#nHsfiS#XPD*qN4*Q@*=8y@$+hV_4KcyEdQYi9(!#>B(&=H+h%D=7~P zJNLgS*ho3pIsVrcdF*MXma03)Xs}GD^!=Ti8y)uYiU1{Q8ftO9RmEm*Js+kU{kSN| zfnKFLX!Api+}PdfP1;4v+LO~s8=oz!WQIj)!?m7QiN){mM_9;+Jmlc&h%gSV)gHXj zj;;Ylc%@)oZLj)6EuNo_mVq_`U{N9>^3c%ww99CZBn;Gng19@#E)LjFn#8EkwE;rV zrX}l9`;D%|U?3D-uunMcUCe_tr0+=)*SB}D?=^oQ$YX-}H)xr#g6Zq|7%A!U)zhx8 z)q$A{*g#@)a$dKQ^OKX4gIQ(z0l>7&`KD*_+HX<(`wD30CwgY!ju3Gm!AQCyBb89w zXD9k*Mv08fOdxCTO0w*>VO_!c#fY*>OPMmj%t?oY)QPzUyUuROJ`I2=f$;?bqZpqm zPH)P8=^NFq3wdr}Z*D`fEOl&@{?OBlmV!S|-E@0Y*RYoQ!Di;s7OFOt{hk zwkCyr!Muo#2m@<>;TUFr0nu&?R?gKQdFbY%PojBBLOFI)9$yvFcGAZ2n1y<}1vNFd zGKhirsf)k;xz&&6`74WuI~b=DDxnclZ4j@?bM7-PwAgd^M-6-2X#%6pkvr}WU^gc> zZ70LT0!CY#M|&5Vjg9dbxb0BY0iAl!r<7bUH-vK$Ps^E?t+T$nvG41~59S=r87H6l=; zB{aP;G=GX4cd7;NBFq{!QowQBJ2^oDgNXtg^P_P&{!R*GQQq{Bo%yofKFayRFhsSB z=vd*;y9D75^$uKvB`F?-`X(F61L_@EEB~jyEy(NVt#@Gc-0Ax3QF36V#P)veTiQL3 zPxE(B;CiJ-xYIp5ZjVvXAuOMU?wKhe)*+q<&g`8a>#d)mJ;3zV+e8e&aDLfEqqLhn zaP_0CS3VG6x~Gk;t($1~wRQA0e()2?=xZGH3ygBne}*QB2fp47{(e0PbiP0bf$0(Z zwfo7V{{jybXgrI8JmcQ+1HxXOIRtd98lmpE?2(DykJ$`PO;&gFR2aU8l`l!jr<^Eo zQ^#z%bdn!U`ph`AMK4K^Fow^uwrb*joT@i|a-|=Gq=O3jp!&VCbNz>j3$K^u11*HB z>aXkNl{m0PFpb#jGbiT-)08o909rK33|r7I*zL^_A<+5}#>YTpl)HCZw~PR* zvBeu%MIud~&}EP9FO=!;_NNJ1iX(q&4Hq{XsQwz>bJarZ$n=LcWY!>VIYqs(2#XS1 z)yLcva^v3W zpTNu>pQ78lVa%V+tJN{|0li2X%SC;bve|jDMU?C!F_V+nbPVLJ2`yhEt0m_35ArH} z5K}Bq!$|z&)+jwX2j0V|tHLAHPnKOCh8o$`PTgI}GFusm**2!}*ni=!)tUtrKJIXJ z(Wf;&T!RcfHOAMp>o4mqe8NtTuq551!H`xUVtqUi+Y}>3P2HHq=!hbHn}-Gy6PB{> z-nYdy-vgy$Eklj6ok>cVu_*0lb9j0t!EZmQYhmKyZvFo^ie>PEF?!zNnhCEJYn^ExrY!1tE@=L4JoUcAGJfbX7`K(Ueb8XSMPes1>#=-FF>u1btaKy;7vD>ITxEt zS~FY9a6NFLmW{Ndd2lf zWsDmu0Tl+8{1+*X_n{6r;D)I|^vMgh_W)kFdU*M7Ug4j=2b|jU#gC@Wl&TR3Y^X2i zgmgC{PzlHsmvCjd`d1<{xc3n}3LZ$tf9x_2?^{tXGXL-~<=F|tIEKCZ<8VpZ@vQ86 z#NAlg-Gs#PHe5?Ip%N0+6lZpmOxvnjQ&h64?xdyHL)v97rdzZ~Rg-U_lAn8mMK+X174bn7l$s1wKuwpx~tkeyqM=-)!%zR z6nB673|h}n0N>!FFdOl{0M znh}ySHT@_TuHpESZZ~mGKd3rR4YDtQQ<1?lP-h{-t zK$G{P9KY_#9z*NBrp>evE_ju&#`Pn|7u8SLef(keq_yIEH){QBeI0zD{=z28$4=n>^>>fE$FYf)Jq zH7jdSNg444V8`3?gq*8U1i>$KXB;f6x!N`8DT|dfkD_o`(MMF@Gz~@Q>e8{=%ru$5 zU7EKf7O$M0*!#}(Lb%7dX$rCQRD~ZwU~+9 zmVZGlHw@HRWk3hn&`S1b@AvL6%BP@`0>%p1`^E3bcQKS6oeM=HduFwgU|nGl#~ZLW z3(y34ZySg=C0f{6Du_%uB**BOB`%wH*@P0(KL1#$Cx=XVIhIcI(;DfGae`FQ&QlEH zETslcqsVa2g#;qlXJ^BP)O-z!(a+Bgc0{@>_PEJ={6I=3RLo*=^nr0z&8JcrY~BEp*4oa~36@ zSjAe+5zP~i)QdCVspsC^rrSgm;EYsgWm#bQo&MA$C>vL<}hPRt>qoXH?fQh(Re3R#BMrI{pn7$CrghFlqcZH2_I1Lfg)l~a9P5g1Q6 zF1|;WwQ~tMr*uo)_NrROtg>D}*~Vr2cIzHH+@JgtY$B=jVF1C#v;2y5p`={lm(Spg z?)a{0qpVnHZ3FwsubHmz5=oQ`b;C7z!kuE2-Ubi&s|C?PsA!Q(AibR8!V8>C(eiI4 zDFM7xbl>(|MuThSfIIn zmSGAJvND}xvYH=c=p-9Q4`chPIQ;PgzgTEMC31hV`xf6x=Ff`zsyGw#LnEsS=TdqO zDPHbRYD-%FHJV1Gg%Q@0Akym`kzUTNgu;YTT=QDb=b8LkI=ZbuLZ>XTw6*Yb(_x;? zI7z3RrXL&qy(U*bY?S&KWa{8K$YR94Q(Vq^Ts=k8pDNDD{a(60b(A<#QIWeUjspnDpR)%tM>PxkwHdj%T7 z0kLaRr>j+# zqUph4D|+9j1E;-DqvQOQz5ql0E`eAC9=ea}Z5F z6RF|D@hm0>Rsh1j>F_(UkVEDnil&F6*F@L{WLjoLS!p{&xe*sv`Gh#`?=2RG6}W8g zY}FYXls){|T8>^mE9?bWw5R&g2Xi^`AH_I1gyl6Llf;CxQxv7*2vs}t?)b9X2j;DF z^g#8&;w9NoPfW5{ma4T#tW}Q?Ywwm|SOi$>m~i4zoR36w;~}wkwfuzTIKT zng3!p4o71QU;n-YGH!7UetS1625JGV1U~gqtcys*#5RR1&F7exS)I}3VXHI$2k+Qv z4Pum_ya|4YIx7ZDb}_R65`Sk>?2c4OYJu8HyzGH`>Pq%hMb$Mim6XIqsBjT|O!DC6 z&we8_43wq=`4=Wx{P|B<`$+1lZi|w<175@$aJ*oug!V5 z$7xAAMqPaU0CCgHBEw1mRVjE4BC_>tpJXC+?Ti>$)&c4w$I9VO7aS)bCK=}7U=*}qZYdS{-7$-ojX2ZkOY~S+^C@+=s4mT2 zrl`B1exK*ghP(x0yPns*8ofp-Gd@UyaFO(Q6*b0nhDv23LQnLRQ%MfMIn^r#f&6NHQ>vS*N|+=9riGS^jpg} zjx@4ZMQCG#C8sCnMeQezinCO^`v(0LP)mkT!0nN;sRRMA)ngjFhHb51 zT8!$FTJV;3$OMTa{kMA$E%fQCD_=bxm%5oN@lqfqx>W*Ys{;8>QLjQ`S0sbW6Oj+Q z8YE=hlsHNJJF0*)_y)$37A5NWZg&?YO9w&+$->VxyB%O%%6-gMbBgCP0XOUv0(F%u zWCBwvb~DWY6MW+5FUDlons*BMg1Vm(@Grfjz^9$Fz4lm!o{xfevogOq4`+4~r4dK_ zBx#82KwOjCCRD9PQ7$1hTQrcVgP9omIbE6-?{iVE#Gm{$?eb1O*6k;15YMPNh?&eZ zU~1;qv@wN`pDhEGHi()+T$cjqIm zA6LCHJgX)eC`Njmlh6s`{?_93Lx`j{5-DJ(3?!TF3zg)H1N!Sw96 z#4}^U4^wHrhk&vn-P&uP7!Mh^N$+`!q6;r zGrqR8K;qFFkGn9Vz8Lq|B+ZScisw4pHd^ytHF3@S`wtSR3w^@dHPUb*n_128_em9@sG34Pi|PNrpj0+K>0e?P>t6?u@q90zZ-k6f5S7e#?<6b?(?`!ZQ@ zWl<_LqNGGr2+gqmgahda?kKj&gBc4ZkIvA@)5o6`*&gPHtB+(JpjAd} z+}b@pDPF%|$7fM0Sfa@FAkVVB6I1d{YF16(_nCS^OiV+FrZlf5+UkqN;M|Xpnj0dm zui2oIKivP6c-S}-JUZlbGG#IfG!+sJ^RVF95No8hsH}2fN7Jm1>2MXFwsSW@9JD># zte_gQWp{vgz2QE)NeglO$d;DBEON(B{%#9Bi3@s{@uM#XO{IHZXg&pzRraN+N5JzC zQVvRlKU>E2h@3YjLY%=ulh_(p?bU)eHfAkFUvdFPw3@<63FoiwV4*=GWR75YrrvPo z#2;$`smHTjbz^3WzdcvR!7~Dd_F*-1EZNC3G_>*9M4P_ZXItFkntNFU1$-UNgD5O`sNClcEQ%bq0_rcK(%(F+2 z$mf`$(P&pPH6d?q^vCq-K!GRcnodj&{p0m(Ggdq7D`rh6gbpQg2ZgEaXpbU59K;<7 z{WvNw5B~ZvMfa92YN7~p16Yy@w0Eg}3}sM-I;uRb+mIynU5p~}nW*9YpOZ@zpea5) zVzNhcDy;c_gwI`u-(8s>RRZUr!LDx_8?nZ45lge+cHD?nh5U_&FHoW`qGI>}N+kKl zQ6!EuE|_yhma~=d!7HW>OSKqVSMd3 z_&jqE?FYLUKY!LxATea(sC%!bwr-y0!p{`EWY=vs2ry@K`pM|HoX$r*tGr#RinUu= zT4C1JVuh^Rz(bc9G7W2%&-yPZx2>CaChioXvB3|_(8N=)PD=21H;>E{%p{I=MO9zies`GxclnIC zpIMx=$R9)PpE#h77F*bV?k`wdsI=G0-B0;=JYjp3>oHMEQorSS)OR{vi zody!+n87NaN@pj^1UUGE@Cf^46R{*A-MyrD5j#_V;S6CQ*Wj1mDbxYg zs}^d_x(_qY+(_K?%wrD(SsQ4*h^iyP9Z;2H(OthXLh9MUdihgA@H_6=K-%8(uQ_If-o zu7?&FbiNL-6;}qbp25`fFy@Cf6BaqR&Yg+IZZDeG>q!2N1IVDsXxZF<@=r#Xp(h1u z9kDC{C6~V&wdE8E{3NcvWRxZDj{9Ez+qC71B5x}t60%eedE^}7*1KVlt1lO49i1rN z#<|IIVReD~Fd|&udwZdzKhr(7Wq+$t^)RntPfe(&HkfW%%`xubQd)CY*hYXBR26b_ z{&m}oaxDgwNzr^suMTE#%V6-0WfngWZ#B1G^~B{tovVZrIQ6MEx9A{eMW3^7yp0oS z>;b`VtFiOp)AC6{NG?gpfgBSkPo)6qN&zkdK}QLW^IFl$4S#E`AIi5GF-7>uQ8WB& z3Z>}QZp-3trj;x|EQ7-NUmoj&o{RuDN7GVx(F0};jXP@;brfMN0=#<5Nr&d0*`ZG zd@>RPaci4@BGHnwd=8P~14Enm)XI*^(-z9&hwx*6HhgJF5qbL*`{a!6@j8LEI7`7m zR&=g*wpxD+nfQs&2B-pVh-LEJy+OKJsGVNHeuSPR;ptkk|K*o5;Y-{xF`W z;2Z7Yy)uE%7sx}E7wD5+syy5#eCM?>l)UJ@sqg!`D|+Zyqc6z|SPQ+9T*t|6_cr5% zT0JZ?U$g4HcHcq{q&jA@`bNCS0#9bkd~}wKYAucXMl;nXblzAoPXJ*H@rAXdbCGBUQL*$(RgGA zu0mgixh~p)oNfgYnNzaX;26ORZm-3Vb=>7=zdpI4OjWAN)aE9}yHb-!&OOZ@-pCav z$I4zEouos&-%;(?AI*~Uzmk|zjZOdJ~z-&SI;1 zxO8(n>SUsva`>5SW$u!k#<8Jk)t>C8zi~{er692cnpHVtbN+)i8ga3yjouW6SOX;R zQ*}+Kt$(B5dXxC`FN^NlWQPaC*!#zo)dt68wXzFK%TMW3{$~VqHgcu#oHA2E(aNKZ zotG`u3og`~+9*=Kccm}ChO(P_1W;CEnFtad8me+}uN|Y! z>iqJ1d@Zi8o@iu$M2Q#u8u>2$nMERBc`&A_VHz|rzoHv1ZJmpkhyep=N5~N86q^7f zOrWE*pT??Ci*0R$qP?GSP5w?)zx7GqNye9sXO5Ze!%OlOwq>?eTH7*{ZsOOz$?nYh zq`h5`GW`Z7+J-((=~Kyix7U-Cm=3WMzi)b1O&YhxnZ~;hM9v?t@&@XbBI52FnlURO zQ>+jbO^-#ZCw>>Lhs6ys!0orqViJlL$iBl3fyc!S;!z(dCOQ6b6>^7UUGeTVF2;_Sid z0b}UR7TLQ>kS_6{$HmXgBaW}O$a&mY4Nr>N)D19_ixA=j^1e=O^=QG0XpwT1%PzL; z(e$jWadwo|Tju7%I!-}~P#E#=zFpbS6OJayO$(yIx9F)@1jC^(o@F zJ5CDHc!Gph`pr4ibnRBl-?n=74!3w++(PHU3!FL`sYm_yV5mkisk(JDPoTBH+U9^1 zKLD%z=U^508t;}LsUTA;`dA9p?wI%tYm!*DW zXk~5fAm<8FWeHW(bcb7Ubk6(7Rw(SLDRjb*ULtc0`v;IWT0^xv2~lZ?<9i0S5@%rp znPq{Q*u!(!YBq^#b4wwJV57W*nkhIc05XYQ(D4QcktJ`R?N>C#=xj{JvbF!DJTLpP z5j_qqF|i4cgA$xWhSNPgBdH*(O{#yp%q1-4uU)8Y!7a*@cqrHzsSR~3FWTYl$@^2B z5f%M+uvjz(#u_WtQd&5)hz=O<(|c|ZQnT^dVz@rT#8@r6-J)1PswV|R`ki7b_r;$i z&9%Ad1AiCMJ=X~EbtEZtVX>aKK#e9(wf>Hf^y>)Mx~RjxzhnvWX%LoCg0%t?h7|F>PV;wNmyS}$lDG*V!?!S z=oILMF;PQH)6FXA_7i(Pcs?URokbF}K)1=+V-oG7+d5&^7Hw;!hv^Wf)P3g@kcyD! zvDI=MO2g@SX!IT)bA3`FN*R}$#LkKA&AIz2gnxD9ns6W*j=TShIBBn&CSIHk@wsyt zjnD>5>^mLZGv|mrcWlemh|!&g0OgnJ1A4D1lwyj?^^N09e`EATobN}jBZK0ooTwi8 zF*T~J>9`ywSHN5a_Q?~y#wuH5c|qPu%@QgO48iLa$g3~Tz(mYb$;(a_kqxr+!al=C zjLX7-TvvaHUI8H4cOiLH6wKyXk^I4r!abPwPq$4J*~|&qBRVfI<7@JJ_}}bAzY^S4 zQt35wO4rXZS2lr!$JSfmuyPR#Wh$ezy(71I7^}iZJiZ?vBZ zF?5wZM51f!QQxQi>`yG^l#=k1-DoWUZh(2rc60dua%%x_wmXQ{+u+9WVtdwB^);s_ zqS=)LakdCo6`a)i0$a+UVy%?(edX~v2)6H7%kGz1UVdN~Bks^((Ysz+u3qC{j15lT zb4+$>hCaAf8W)I@=H=K?yPP4ULZ#fy!A_hmN>=Vq-GIb;o#DAJv-0v!hGxr9R1z!A zgFJ$mS@?W{2syUsOc_*Izyye-m+_Q>QgOF(<+*yudc3S0kss+o3GHBD;Pk5+Q8NK6 zL#f8%O+J}P0T(T+iH(ez=Ry3VH9etI3}v%U%zX8weQ4rA&D_aov<-On2I$0A$lH@$ zFyn=?y72r~5>OLcp?C^>r?zY4s^eLgvm^5?gz}^w14vA`IXq<(AIj4LCJo6j!0}X9 z$*x;;b_<9bT$kI`aWBpF_+sZL#|~x28&MAtJ1#OM39|*7KlbzZMc0;)7$yWejb*ntlHK3042o>Irf8tXQyw%mxSiBki(xS6!dju=# z>{m5A)?!&#%@8=U^d3b4Yb+07svHRze1+jMcI>`sgBI!!tYd%B5)nn)rAVf&TGr$T zxajX5kB=!bV8AbCoU*FSbH!eG=uyUR)s>hIZQB|gMmNmE&a=0=1+GD&22^qXJ! zA_6Z_>}I8XE8AYso@Vtl#DUy;_Rq3+?icM5#KyIv?Z(6(=ubxT-Mz!gb+?Bg8oha4 zhvZqw<)&c*zs#hkl`W+2IvsCHa@G0@sUw)QI&Cf_5WW=73ZvHUw4oAOw+Bvn=-}K_ zNfPGQC=btOj62teKHRF4JOd4yyw@EZzNuUtSRgAW9yjm1IHKs-(jQG3Tq6Q;VSgGB zmx)^Lc;IW&UN_!Pgat?|QOdfsTJV|E-`9BW&nKLup4OS}-#>ohP8y1XEOZ_uVEcvV zaj(64VumF?(PNY<6IyjcJz7)!U=(%y8@q?O;E0#dspVIKyyQ_!4#`pKsp20JIlPcqvnSz01b|O(OHEV zbYA9k(4n!?m>Di?!3>26ZL`yBU#Vbbl0R*lIt7x5Y%H0`!)tpmTU*H(+ast=%XfDHJk8$2>!O2k1kY%n5zcslD+fT6;* zg1)Y1n0R@BG9?$$b6?eU;|NeH;40ii{2I{(z7PlI~d-zACcAN=2+YZwKgF%vD*N6J*>5B1h~YEea6>q!se zE7-C~)qh(4pf|l;7C4?_(0ua2P|efcCr&h(^@Kc}Nm5lg&;?J|1r44@9Fm@mz-NFc zv(AAe<>&0?*u%P2YE)9Da4*KSv%hQyFMHhhaI$4u=Il#3z6Uj04Bu>Qzs}X3Ze|HT zhz_`9Wp>=H=8As3(mQ@k$D--oL39w8MWbz!lcS=8)oHo>lE^&#!hHJj8LS`88Y-}f zTf2jh#Rq8QR*!IWL&5|Ayxkqw+sM-*0n%5q3fR zv=B%?lK~SxBW8y_WGcTGydpfXTYXs%VG^ZV#Ae5Tf5UrQ2Nb8R^jHB6F4Y$gT<72F z@QcQu5ctNXu#fsG;X=EKOnfs#hyaub=f7-oa_Ejq>IajiG?Ig~C&}c-cDM>E5` z4kLQI<|q2OwNt*t7ix8=mft+SdVB$S&Tg2D`JNBNw;5h6Byj!rocu}j-;=_|!uk(b z3V35i|KTtHqCVfSRBMscx6ie)j;$w{*)2G#ZJn|%Kb{9var4qnjCC@W2iFDKx>eRh^>XS8R=gX zr-+lu8^-!-@~4xxLA=RtjsGabfcDa6APdX?F;R6kv(X^s{;T<$ApMW<_2={~9^S(aBlN66i?E#`>otdEnnN z0KoM}@xOCQ`X}put$GRDSBxKIYeCAa39=QjbprjP_|r}kWa@0`^f$%(Rx1D3iV^XBvIKdHc7`n~v>Ger@-U{T~kbl_$1S zw*|dD#X$PDGyMA`{r9ST>Skx|qB^ zIYDaz1UcG~0+;|COs@q&Yw7H4&&&LZX1{7J9D(+hAQLAhJ4XvTx<8)8UZ1OQ2HDw) zzhT|9;=HUZ0B!&Pzy@ID;9=*cX93W#u+aUx)Bj<@|G~7yfUm3E&f-sZe?s^h(*7T` z+uhO39G-;~zz)yyuY;76gM*EO)SUD$-K#&&*Jb;5klOyOV*#*mzQ*{!bu4ey^`ANx zz$?K1pLT4o8U9~704sp~zw7|4+^^I3zwH3*T>m*10N`zM|I?29|7gp@@}J`auyXz% zW8q?dUDE&fb#?^47P8}?XJS-Ao@Q^kdV{`I?Cf4A{V$;WO_s4Wf1TSu>*6ow8|di# RC%bQ90N|;pBorm#{~w31+EoAm diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp.tex b/software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp.tex deleted file mode 100644 index ebbecb5..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp.tex +++ /dev/null @@ -1,173 +0,0 @@ -\hypertarget{server_8cpp}{}\section{src/server.cpp File Reference} -\label{server_8cpp}\index{src/server.\+cpp@{src/server.\+cpp}} - - -Library for opening a T\+CP server, receiving data and sending message to monitor. - - -{\ttfamily \#include \char`\"{}server.\+h\char`\"{}}\newline -{\ttfamily \#include $<$sys/socket.\+h$>$}\newline -{\ttfamily \#include $<$arpa/inet.\+h$>$}\newline -{\ttfamily \#include $<$netinet/in.\+h$>$}\newline -{\ttfamily \#include $<$stdio.\+h$>$}\newline -{\ttfamily \#include $<$stdlib.\+h$>$}\newline -{\ttfamily \#include $<$unistd.\+h$>$}\newline -Include dependency graph for server.\+cpp\+:\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=350pt]{server_8cpp__incl} -\end{center} -\end{figure} -\subsection*{Macros} -\begin{DoxyCompactItemize} -\item -\#define \hyperlink{server_8cpp_ad1106125b13c36a78d012177dc2aa67c}{N\+B\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+M\+AX}~1 -\end{DoxyCompactItemize} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -int \hyperlink{server_8cpp_a99b54d5b3404766f906f49605a4aa0e3}{open\+Server} (int port) -\item -int \hyperlink{server_8cpp_ab65b2df50051036defe0f35366f5a3d6}{close\+Server} () -\item -int \hyperlink{server_8cpp_abff9f8e931ecce919588b371dc511857}{accept\+Client} () -\item -int \hyperlink{server_8cpp_a8d865d29914b980fd71ed8d347e4ec50}{send\+Data\+To\+Server} (char $\ast$data, int length) -\item -int \hyperlink{server_8cpp_a4c2df7961aa7379ac79d80980a1c537b}{send\+Data\+To\+Server\+For\+Client} (int client, char $\ast$data, int length) -\item -int \hyperlink{server_8cpp_a8b66a2007f3f9ed8538428a309c9d368}{receive\+Data\+From\+Server} (char $\ast$data, int size) -\item -int \hyperlink{server_8cpp_a247e0124af257d0cc7abc25a7c448d1b}{receive\+Data\+From\+Server\+From\+Client} (int client, char $\ast$data, int size) -\end{DoxyCompactItemize} -\subsection*{Variables} -\begin{DoxyCompactItemize} -\item -int \hyperlink{server_8cpp_a67917b0d31c20024dba33363eb8db5a2}{socket\+FD} = -\/1 -\item -int \hyperlink{server_8cpp_a2e938cd63a2404d0902c57205706872a}{client\+ID} = -\/1 -\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Library for opening a T\+CP server, receiving data and sending message to monitor. - -\begin{DoxyAuthor}{Author} -P\+E.\+Hladik -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} - - -\subsection{Macro Definition Documentation} -\mbox{\Hypertarget{server_8cpp_ad1106125b13c36a78d012177dc2aa67c}\label{server_8cpp_ad1106125b13c36a78d012177dc2aa67c}} -\index{server.\+cpp@{server.\+cpp}!N\+B\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+M\+AX@{N\+B\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+M\+AX}} -\index{N\+B\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+M\+AX@{N\+B\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+M\+AX}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{N\+B\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+M\+AX}{NB\_CONNECTION\_MAX}} -{\footnotesize\ttfamily \#define N\+B\+\_\+\+C\+O\+N\+N\+E\+C\+T\+I\+O\+N\+\_\+\+M\+AX~1} - - - -Definition at line 35 of file server.\+cpp. - - - -\subsection{Function Documentation} -\mbox{\Hypertarget{server_8cpp_abff9f8e931ecce919588b371dc511857}\label{server_8cpp_abff9f8e931ecce919588b371dc511857}} -\index{server.\+cpp@{server.\+cpp}!accept\+Client@{accept\+Client}} -\index{accept\+Client@{accept\+Client}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{accept\+Client()}{acceptClient()}} -{\footnotesize\ttfamily int accept\+Client (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} - - - -Definition at line 71 of file server.\+cpp. - -\mbox{\Hypertarget{server_8cpp_ab65b2df50051036defe0f35366f5a3d6}\label{server_8cpp_ab65b2df50051036defe0f35366f5a3d6}} -\index{server.\+cpp@{server.\+cpp}!close\+Server@{close\+Server}} -\index{close\+Server@{close\+Server}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{close\+Server()}{closeServer()}} -{\footnotesize\ttfamily int close\+Server (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} - - - -Definition at line 63 of file server.\+cpp. - -\mbox{\Hypertarget{server_8cpp_a99b54d5b3404766f906f49605a4aa0e3}\label{server_8cpp_a99b54d5b3404766f906f49605a4aa0e3}} -\index{server.\+cpp@{server.\+cpp}!open\+Server@{open\+Server}} -\index{open\+Server@{open\+Server}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{open\+Server()}{openServer()}} -{\footnotesize\ttfamily int open\+Server (\begin{DoxyParamCaption}\item[{int}]{port }\end{DoxyParamCaption})} - - - -Definition at line 40 of file server.\+cpp. - -\mbox{\Hypertarget{server_8cpp_a8b66a2007f3f9ed8538428a309c9d368}\label{server_8cpp_a8b66a2007f3f9ed8538428a309c9d368}} -\index{server.\+cpp@{server.\+cpp}!receive\+Data\+From\+Server@{receive\+Data\+From\+Server}} -\index{receive\+Data\+From\+Server@{receive\+Data\+From\+Server}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{receive\+Data\+From\+Server()}{receiveDataFromServer()}} -{\footnotesize\ttfamily int receive\+Data\+From\+Server (\begin{DoxyParamCaption}\item[{char $\ast$}]{data, }\item[{int}]{size }\end{DoxyParamCaption})} - - - -Definition at line 95 of file server.\+cpp. - -\mbox{\Hypertarget{server_8cpp_a247e0124af257d0cc7abc25a7c448d1b}\label{server_8cpp_a247e0124af257d0cc7abc25a7c448d1b}} -\index{server.\+cpp@{server.\+cpp}!receive\+Data\+From\+Server\+From\+Client@{receive\+Data\+From\+Server\+From\+Client}} -\index{receive\+Data\+From\+Server\+From\+Client@{receive\+Data\+From\+Server\+From\+Client}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{receive\+Data\+From\+Server\+From\+Client()}{receiveDataFromServerFromClient()}} -{\footnotesize\ttfamily int receive\+Data\+From\+Server\+From\+Client (\begin{DoxyParamCaption}\item[{int}]{client, }\item[{char $\ast$}]{data, }\item[{int}]{size }\end{DoxyParamCaption})} - - - -Definition at line 99 of file server.\+cpp. - -\mbox{\Hypertarget{server_8cpp_a8d865d29914b980fd71ed8d347e4ec50}\label{server_8cpp_a8d865d29914b980fd71ed8d347e4ec50}} -\index{server.\+cpp@{server.\+cpp}!send\+Data\+To\+Server@{send\+Data\+To\+Server}} -\index{send\+Data\+To\+Server@{send\+Data\+To\+Server}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{send\+Data\+To\+Server()}{sendDataToServer()}} -{\footnotesize\ttfamily int send\+Data\+To\+Server (\begin{DoxyParamCaption}\item[{char $\ast$}]{data, }\item[{int}]{length }\end{DoxyParamCaption})} - - - -Definition at line 85 of file server.\+cpp. - -\mbox{\Hypertarget{server_8cpp_a4c2df7961aa7379ac79d80980a1c537b}\label{server_8cpp_a4c2df7961aa7379ac79d80980a1c537b}} -\index{server.\+cpp@{server.\+cpp}!send\+Data\+To\+Server\+For\+Client@{send\+Data\+To\+Server\+For\+Client}} -\index{send\+Data\+To\+Server\+For\+Client@{send\+Data\+To\+Server\+For\+Client}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{send\+Data\+To\+Server\+For\+Client()}{sendDataToServerForClient()}} -{\footnotesize\ttfamily int send\+Data\+To\+Server\+For\+Client (\begin{DoxyParamCaption}\item[{int}]{client, }\item[{char $\ast$}]{data, }\item[{int}]{length }\end{DoxyParamCaption})} - - - -Definition at line 89 of file server.\+cpp. - - - -\subsection{Variable Documentation} -\mbox{\Hypertarget{server_8cpp_a2e938cd63a2404d0902c57205706872a}\label{server_8cpp_a2e938cd63a2404d0902c57205706872a}} -\index{server.\+cpp@{server.\+cpp}!client\+ID@{client\+ID}} -\index{client\+ID@{client\+ID}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{client\+ID}{clientID}} -{\footnotesize\ttfamily int client\+ID = -\/1} - - - -Definition at line 38 of file server.\+cpp. - -\mbox{\Hypertarget{server_8cpp_a67917b0d31c20024dba33363eb8db5a2}\label{server_8cpp_a67917b0d31c20024dba33363eb8db5a2}} -\index{server.\+cpp@{server.\+cpp}!socket\+FD@{socket\+FD}} -\index{socket\+FD@{socket\+FD}!server.\+cpp@{server.\+cpp}} -\subsubsection{\texorpdfstring{socket\+FD}{socketFD}} -{\footnotesize\ttfamily int socket\+FD = -\/1} - - - -Definition at line 37 of file server.\+cpp. - diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp__incl.md5 deleted file mode 100644 index c9b189c..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6bc39aa8f833820b2bd6382ea20f2b1b \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/server_8cpp__incl.pdf deleted file mode 100644 index 0aaac39a1b2a2d9eebf2dfe61eaa7fdb0f843a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13558 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/server_8h.tex b/software/raspberry/superviseur-robot/lib/doc/latex/server_8h.tex deleted file mode 100644 index 114be0b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/server_8h.tex +++ /dev/null @@ -1,225 +0,0 @@ -\hypertarget{server_8h}{}\section{server.\+h File Reference} -\label{server_8h}\index{server.\+h@{server.\+h}} - - -Library for opening a T\+CP server, receiving data and sending message to monitor. - - -{\ttfamily \#include \char`\"{}image.\+h\char`\"{}}\newline -Include dependency graph for server.\+h\+:\nopagebreak -\begin{figure}[H] -\begin{center} -\leavevmode -\includegraphics[width=350pt]{server_8h__incl} -\end{center} -\end{figure} -\subsection*{Macros} -\begin{DoxyCompactItemize} -\item -\#define \hyperlink{server_8h_af257e2a3e091629829857a2eb8931a7a}{D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+P\+O\+RT}~2323 -\end{DoxyCompactItemize} -\subsection*{Functions} -\begin{DoxyCompactItemize} -\item -int \hyperlink{server_8h_a99b54d5b3404766f906f49605a4aa0e3}{open\+Server} (int port) -\begin{DoxyCompactList}\small\item\em Open server port, connect and listen to given port. \end{DoxyCompactList}\item -int \hyperlink{server_8h_ab65b2df50051036defe0f35366f5a3d6}{close\+Server} () -\begin{DoxyCompactList}\small\item\em Close server. \end{DoxyCompactList}\item -int \hyperlink{server_8h_abff9f8e931ecce919588b371dc511857}{accept\+Client} () -\begin{DoxyCompactList}\small\item\em Wait for a client to connect. \end{DoxyCompactList}\item -int \hyperlink{server_8h_a8d865d29914b980fd71ed8d347e4ec50}{send\+Data\+To\+Server} (char $\ast$data, int length) -\begin{DoxyCompactList}\small\item\em Send given data to monitor. \end{DoxyCompactList}\item -int \hyperlink{server_8h_a4c2df7961aa7379ac79d80980a1c537b}{send\+Data\+To\+Server\+For\+Client} (int client, char $\ast$data, int length) -\begin{DoxyCompactList}\small\item\em Send given data to monitor, using specific client ID. \end{DoxyCompactList}\item -int \hyperlink{server_8h_a8b66a2007f3f9ed8538428a309c9d368}{receive\+Data\+From\+Server} (char $\ast$data, int size) -\begin{DoxyCompactList}\small\item\em Read data from monitor. \end{DoxyCompactList}\item -int \hyperlink{server_8h_a247e0124af257d0cc7abc25a7c448d1b}{receive\+Data\+From\+Server\+From\+Client} (int client, char $\ast$data, int size) -\begin{DoxyCompactList}\small\item\em Read data from monitor, using specific client ID. \end{DoxyCompactList}\item -int \hyperlink{server_8h_a51b9372f5467705aa81d76ae034c7628}{send\+Image} (\hyperlink{image_8h_a9ac2855e21920c676a108df386ff9415}{Jpg} $\ast$image) -\begin{DoxyCompactList}\small\item\em Send image to monitor using default client ID. \end{DoxyCompactList}\end{DoxyCompactItemize} - - -\subsection{Detailed Description} -Library for opening a T\+CP server, receiving data and sending message to monitor. - -\begin{DoxyAuthor}{Author} -P\+E.\+Hladik -\end{DoxyAuthor} -\begin{DoxyVersion}{Version} -1.\+0 -\end{DoxyVersion} -\begin{DoxyDate}{Date} -06/06/2017 -\end{DoxyDate} - - -\subsection{Macro Definition Documentation} -\mbox{\Hypertarget{server_8h_af257e2a3e091629829857a2eb8931a7a}\label{server_8h_af257e2a3e091629829857a2eb8931a7a}} -\index{server.\+h@{server.\+h}!D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+P\+O\+RT@{D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+P\+O\+RT}} -\index{D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+P\+O\+RT@{D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+P\+O\+RT}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+P\+O\+RT}{DEFAULT\_SERVER\_PORT}} -{\footnotesize\ttfamily \#define D\+E\+F\+A\+U\+L\+T\+\_\+\+S\+E\+R\+V\+E\+R\+\_\+\+P\+O\+RT~2323} - - - -Definition at line 30 of file server.\+h. - - - -\subsection{Function Documentation} -\mbox{\Hypertarget{server_8h_abff9f8e931ecce919588b371dc511857}\label{server_8h_abff9f8e931ecce919588b371dc511857}} -\index{server.\+h@{server.\+h}!accept\+Client@{accept\+Client}} -\index{accept\+Client@{accept\+Client}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{accept\+Client()}{acceptClient()}} -{\footnotesize\ttfamily int accept\+Client (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} - - - -Wait for a client to connect. - -\begin{DoxyReturn}{Returns} -Return client Id or -\/1 if it failed -\end{DoxyReturn} -\mbox{\Hypertarget{server_8h_ab65b2df50051036defe0f35366f5a3d6}\label{server_8h_ab65b2df50051036defe0f35366f5a3d6}} -\index{server.\+h@{server.\+h}!close\+Server@{close\+Server}} -\index{close\+Server@{close\+Server}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{close\+Server()}{closeServer()}} -{\footnotesize\ttfamily int close\+Server (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} - - - -Close server. - -\begin{DoxyReturn}{Returns} --\/1 if closing failed , 0 otherwise -\end{DoxyReturn} -\mbox{\Hypertarget{server_8h_a99b54d5b3404766f906f49605a4aa0e3}\label{server_8h_a99b54d5b3404766f906f49605a4aa0e3}} -\index{server.\+h@{server.\+h}!open\+Server@{open\+Server}} -\index{open\+Server@{open\+Server}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{open\+Server()}{openServer()}} -{\footnotesize\ttfamily int open\+Server (\begin{DoxyParamCaption}\item[{int}]{port }\end{DoxyParamCaption})} - - - -Open server port, connect and listen to given port. - - -\begin{DoxyParams}{Parameters} -{\em port} & A valid port number (1024 -\/ 65535) \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} --\/1 if opening failed or the socket number -\end{DoxyReturn} -\mbox{\Hypertarget{server_8h_a8b66a2007f3f9ed8538428a309c9d368}\label{server_8h_a8b66a2007f3f9ed8538428a309c9d368}} -\index{server.\+h@{server.\+h}!receive\+Data\+From\+Server@{receive\+Data\+From\+Server}} -\index{receive\+Data\+From\+Server@{receive\+Data\+From\+Server}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{receive\+Data\+From\+Server()}{receiveDataFromServer()}} -{\footnotesize\ttfamily int receive\+Data\+From\+Server (\begin{DoxyParamCaption}\item[{char $\ast$}]{data, }\item[{int}]{size }\end{DoxyParamCaption})} - - - -Read data from monitor. - -Read, at most, size data from monitor. Data must be a valid pointer to a buffer large enough. - - -\begin{DoxyParams}{Parameters} -{\em data} & A valid pointer to a buffer \\ -\hline -{\em size} & Amount of data to read \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Return amount of data really received. 0 if communication is broken -\end{DoxyReturn} -\mbox{\Hypertarget{server_8h_a247e0124af257d0cc7abc25a7c448d1b}\label{server_8h_a247e0124af257d0cc7abc25a7c448d1b}} -\index{server.\+h@{server.\+h}!receive\+Data\+From\+Server\+From\+Client@{receive\+Data\+From\+Server\+From\+Client}} -\index{receive\+Data\+From\+Server\+From\+Client@{receive\+Data\+From\+Server\+From\+Client}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{receive\+Data\+From\+Server\+From\+Client()}{receiveDataFromServerFromClient()}} -{\footnotesize\ttfamily int receive\+Data\+From\+Server\+From\+Client (\begin{DoxyParamCaption}\item[{int}]{client, }\item[{char $\ast$}]{data, }\item[{int}]{size }\end{DoxyParamCaption})} - - - -Read data from monitor, using specific client ID. - -Read, at most, size data from monitor. Data must be a valid pointer to a buffer large enough. - - -\begin{DoxyParams}{Parameters} -{\em client} & Client Id to receive from \\ -\hline -{\em data} & A valid pointer to a buffer \\ -\hline -{\em size} & Amount of data to read \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Return amount of data really received. 0 if communication is broken -\end{DoxyReturn} -\mbox{\Hypertarget{server_8h_a8d865d29914b980fd71ed8d347e4ec50}\label{server_8h_a8d865d29914b980fd71ed8d347e4ec50}} -\index{server.\+h@{server.\+h}!send\+Data\+To\+Server@{send\+Data\+To\+Server}} -\index{send\+Data\+To\+Server@{send\+Data\+To\+Server}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{send\+Data\+To\+Server()}{sendDataToServer()}} -{\footnotesize\ttfamily int send\+Data\+To\+Server (\begin{DoxyParamCaption}\item[{char $\ast$}]{data, }\item[{int}]{length }\end{DoxyParamCaption})} - - - -Send given data to monitor. - -Send given data to monitor using default client ID - - -\begin{DoxyParams}{Parameters} -{\em data} & A valid pointer to a buffer \\ -\hline -{\em length} & Amount of data to send \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Return amount of data really written. 0 if communication is broken -\end{DoxyReturn} -\mbox{\Hypertarget{server_8h_a4c2df7961aa7379ac79d80980a1c537b}\label{server_8h_a4c2df7961aa7379ac79d80980a1c537b}} -\index{server.\+h@{server.\+h}!send\+Data\+To\+Server\+For\+Client@{send\+Data\+To\+Server\+For\+Client}} -\index{send\+Data\+To\+Server\+For\+Client@{send\+Data\+To\+Server\+For\+Client}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{send\+Data\+To\+Server\+For\+Client()}{sendDataToServerForClient()}} -{\footnotesize\ttfamily int send\+Data\+To\+Server\+For\+Client (\begin{DoxyParamCaption}\item[{int}]{client, }\item[{char $\ast$}]{data, }\item[{int}]{length }\end{DoxyParamCaption})} - - - -Send given data to monitor, using specific client ID. - -Send given data to monitor using given client ID. - - -\begin{DoxyParams}{Parameters} -{\em client} & Client Id to send data to \\ -\hline -{\em data} & A valid pointer to a buffer \\ -\hline -{\em length} & Amount of data to send \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Return amount of data really written. 0 if communication is broken -\end{DoxyReturn} -\mbox{\Hypertarget{server_8h_a51b9372f5467705aa81d76ae034c7628}\label{server_8h_a51b9372f5467705aa81d76ae034c7628}} -\index{server.\+h@{server.\+h}!send\+Image@{send\+Image}} -\index{send\+Image@{send\+Image}!server.\+h@{server.\+h}} -\subsubsection{\texorpdfstring{send\+Image()}{sendImage()}} -{\footnotesize\ttfamily int send\+Image (\begin{DoxyParamCaption}\item[{\hyperlink{image_8h_a9ac2855e21920c676a108df386ff9415}{Jpg} $\ast$}]{image }\end{DoxyParamCaption})} - - - -Send image to monitor using default client ID. - -Convert image to raw data, and add correct header before sending to monitor - - -\begin{DoxyParams}{Parameters} -{\em image} & An image object after compression \\ -\hline -\end{DoxyParams} -\begin{DoxyReturn}{Returns} -Return amount of data really received. 0 if communication is broken -\end{DoxyReturn} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__dep__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__dep__incl.md5 deleted file mode 100644 index c21e02b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -26587ecf138210397620cf24665e9ee3 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__dep__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__dep__incl.pdf deleted file mode 100644 index 606cf7cd81599e1e335d8900fae4a54a879076e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11882 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 diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__incl.md5 b/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__incl.md5 deleted file mode 100644 index 887dd7b..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -bb451ca855f19e0ef6da03b90f3ceea4 \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__incl.pdf b/software/raspberry/superviseur-robot/lib/doc/latex/server_8h__incl.pdf deleted file mode 100644 index 1865345e07af25395af115d0f1487aca1243b8c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13582 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 X(6hDw?Og^YMuwO2ClV1kQTYE4=iSNv diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_from_mon.tex b/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_from_mon.tex deleted file mode 100644 index 4e2f6c6..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_from_mon.tex +++ /dev/null @@ -1,48 +0,0 @@ -\hypertarget{struct_message_from_mon}{}\section{Message\+From\+Mon Struct Reference} -\label{struct_message_from_mon}\index{Message\+From\+Mon@{Message\+From\+Mon}} - - -{\ttfamily \#include $<$monitor.\+h$>$} - -\subsection*{Public Attributes} -\begin{DoxyCompactItemize} -\item -char \hyperlink{struct_message_from_mon_ad46f6e6dd24be5cb2bc5eae5b3cdd095}{header} \mbox{[}4\mbox{]} -\item -char \hyperlink{struct_message_from_mon_a1aea445500b0fa020a1b08eaff791107}{data} \mbox{[}100\mbox{]} -\end{DoxyCompactItemize} - - -\subsection{Detailed Description} - - -Definition at line 74 of file monitor.\+h. - - - -\subsection{Member Data Documentation} -\mbox{\Hypertarget{struct_message_from_mon_a1aea445500b0fa020a1b08eaff791107}\label{struct_message_from_mon_a1aea445500b0fa020a1b08eaff791107}} -\index{Message\+From\+Mon@{Message\+From\+Mon}!data@{data}} -\index{data@{data}!Message\+From\+Mon@{Message\+From\+Mon}} -\subsubsection{\texorpdfstring{data}{data}} -{\footnotesize\ttfamily char Message\+From\+Mon\+::data\mbox{[}100\mbox{]}} - - - -Definition at line 76 of file monitor.\+h. - -\mbox{\Hypertarget{struct_message_from_mon_ad46f6e6dd24be5cb2bc5eae5b3cdd095}\label{struct_message_from_mon_ad46f6e6dd24be5cb2bc5eae5b3cdd095}} -\index{Message\+From\+Mon@{Message\+From\+Mon}!header@{header}} -\index{header@{header}!Message\+From\+Mon@{Message\+From\+Mon}} -\subsubsection{\texorpdfstring{header}{header}} -{\footnotesize\ttfamily char Message\+From\+Mon\+::header\mbox{[}4\mbox{]}} - - - -Definition at line 75 of file monitor.\+h. - - - -The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} -\item -\hyperlink{monitor_8h}{monitor.\+h}\end{DoxyCompactItemize} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_to_mon.tex b/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_to_mon.tex deleted file mode 100644 index ad056e6..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_to_mon.tex +++ /dev/null @@ -1,48 +0,0 @@ -\hypertarget{struct_message_to_mon}{}\section{Message\+To\+Mon Struct Reference} -\label{struct_message_to_mon}\index{Message\+To\+Mon@{Message\+To\+Mon}} - - -{\ttfamily \#include $<$message.\+h$>$} - -\subsection*{Public Attributes} -\begin{DoxyCompactItemize} -\item -char \hyperlink{struct_message_to_mon_acb1096bef5e5c300f3d795556fda852a}{header} \mbox{[}4\mbox{]} -\item -void $\ast$ \hyperlink{struct_message_to_mon_a4e5977ba9fb3fa07d435155731944d15}{data} = N\+U\+LL -\end{DoxyCompactItemize} - - -\subsection{Detailed Description} - - -Definition at line 34 of file message.\+h. - - - -\subsection{Member Data Documentation} -\mbox{\Hypertarget{struct_message_to_mon_a4e5977ba9fb3fa07d435155731944d15}\label{struct_message_to_mon_a4e5977ba9fb3fa07d435155731944d15}} -\index{Message\+To\+Mon@{Message\+To\+Mon}!data@{data}} -\index{data@{data}!Message\+To\+Mon@{Message\+To\+Mon}} -\subsubsection{\texorpdfstring{data}{data}} -{\footnotesize\ttfamily void$\ast$ Message\+To\+Mon\+::data = N\+U\+LL} - - - -Definition at line 36 of file message.\+h. - -\mbox{\Hypertarget{struct_message_to_mon_acb1096bef5e5c300f3d795556fda852a}\label{struct_message_to_mon_acb1096bef5e5c300f3d795556fda852a}} -\index{Message\+To\+Mon@{Message\+To\+Mon}!header@{header}} -\index{header@{header}!Message\+To\+Mon@{Message\+To\+Mon}} -\subsubsection{\texorpdfstring{header}{header}} -{\footnotesize\ttfamily char Message\+To\+Mon\+::header\mbox{[}4\mbox{]}} - - - -Definition at line 35 of file message.\+h. - - - -The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} -\item -\hyperlink{message_8h}{message.\+h}\end{DoxyCompactItemize} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_to_robot.tex b/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_to_robot.tex deleted file mode 100644 index 21461fc..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/struct_message_to_robot.tex +++ /dev/null @@ -1,48 +0,0 @@ -\hypertarget{struct_message_to_robot}{}\section{Message\+To\+Robot Struct Reference} -\label{struct_message_to_robot}\index{Message\+To\+Robot@{Message\+To\+Robot}} - - -{\ttfamily \#include $<$robot.\+h$>$} - -\subsection*{Public Attributes} -\begin{DoxyCompactItemize} -\item -char \hyperlink{struct_message_to_robot_ab00202c6cfdd86ea4cd891c972405db6}{header} \mbox{[}4\mbox{]} -\item -char \hyperlink{struct_message_to_robot_abf7dafbba72784855abd50469ba82705}{data} \mbox{[}20\mbox{]} -\end{DoxyCompactItemize} - - -\subsection{Detailed Description} - - -Definition at line 43 of file robot.\+h. - - - -\subsection{Member Data Documentation} -\mbox{\Hypertarget{struct_message_to_robot_abf7dafbba72784855abd50469ba82705}\label{struct_message_to_robot_abf7dafbba72784855abd50469ba82705}} -\index{Message\+To\+Robot@{Message\+To\+Robot}!data@{data}} -\index{data@{data}!Message\+To\+Robot@{Message\+To\+Robot}} -\subsubsection{\texorpdfstring{data}{data}} -{\footnotesize\ttfamily char Message\+To\+Robot\+::data\mbox{[}20\mbox{]}} - - - -Definition at line 46 of file robot.\+h. - -\mbox{\Hypertarget{struct_message_to_robot_ab00202c6cfdd86ea4cd891c972405db6}\label{struct_message_to_robot_ab00202c6cfdd86ea4cd891c972405db6}} -\index{Message\+To\+Robot@{Message\+To\+Robot}!header@{header}} -\index{header@{header}!Message\+To\+Robot@{Message\+To\+Robot}} -\subsubsection{\texorpdfstring{header}{header}} -{\footnotesize\ttfamily char Message\+To\+Robot\+::header\mbox{[}4\mbox{]}} - - - -Definition at line 45 of file robot.\+h. - - - -The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} -\item -\hyperlink{robot_8h}{robot.\+h}\end{DoxyCompactItemize} diff --git a/software/raspberry/superviseur-robot/lib/doc/latex/struct_position.tex b/software/raspberry/superviseur-robot/lib/doc/latex/struct_position.tex deleted file mode 100644 index 6043be1..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/latex/struct_position.tex +++ /dev/null @@ -1,60 +0,0 @@ -\hypertarget{struct_position}{}\section{Position Struct Reference} -\label{struct_position}\index{Position@{Position}} - - -{\ttfamily \#include $<$image.\+h$>$} - -\subsection*{Public Attributes} -\begin{DoxyCompactItemize} -\item -Point \hyperlink{struct_position_aa56444be37071311cfa11aae3e2c2f64}{center} -\item -Point \hyperlink{struct_position_a780d124971951424c0c63f6d81bb4d92}{direction} -\item -float \hyperlink{struct_position_a733540df6c0f832676dc0846b34bb1e2}{angle} -\end{DoxyCompactItemize} - - -\subsection{Detailed Description} - - -Definition at line 69 of file image.\+h. - - - -\subsection{Member Data Documentation} -\mbox{\Hypertarget{struct_position_a733540df6c0f832676dc0846b34bb1e2}\label{struct_position_a733540df6c0f832676dc0846b34bb1e2}} -\index{Position@{Position}!angle@{angle}} -\index{angle@{angle}!Position@{Position}} -\subsubsection{\texorpdfstring{angle}{angle}} -{\footnotesize\ttfamily float Position\+::angle} - - - -Definition at line 72 of file image.\+h. - -\mbox{\Hypertarget{struct_position_aa56444be37071311cfa11aae3e2c2f64}\label{struct_position_aa56444be37071311cfa11aae3e2c2f64}} -\index{Position@{Position}!center@{center}} -\index{center@{center}!Position@{Position}} -\subsubsection{\texorpdfstring{center}{center}} -{\footnotesize\ttfamily Point Position\+::center} - - - -Definition at line 70 of file image.\+h. - -\mbox{\Hypertarget{struct_position_a780d124971951424c0c63f6d81bb4d92}\label{struct_position_a780d124971951424c0c63f6d81bb4d92}} -\index{Position@{Position}!direction@{direction}} -\index{direction@{direction}!Position@{Position}} -\subsubsection{\texorpdfstring{direction}{direction}} -{\footnotesize\ttfamily Point Position\+::direction} - - - -Definition at line 71 of file image.\+h. - - - -The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize} -\item -\hyperlink{image_8h}{image.\+h}\end{DoxyCompactItemize} diff --git a/software/raspberry/superviseur-robot/lib/src/image.cpp b/software/raspberry/superviseur-robot/lib/image.cpp similarity index 100% rename from software/raspberry/superviseur-robot/lib/src/image.cpp rename to software/raspberry/superviseur-robot/lib/image.cpp diff --git a/software/raspberry/superviseur-robot/lib/image.h b/software/raspberry/superviseur-robot/lib/image.h index 239d5b5..418f372 100644 --- a/software/raspberry/superviseur-robot/lib/image.h +++ b/software/raspberry/superviseur-robot/lib/image.h @@ -15,16 +15,6 @@ * along with this program. If not, see . */ -/** - * \file image.h - * \author L.Senaneuch - * \version 1.0 - * \date 06/06/2017 - * \brief Functions for image treatment. - * - * \details This file use openCV2 library for picture processing. This allow to detect arena and robot. - */ - #ifndef _IMAGE_H_ #define _IMAGE_H_ diff --git a/software/raspberry/superviseur-robot/lib/img.cpp b/software/raspberry/superviseur-robot/lib/img.cpp new file mode 100644 index 0000000..15d0bbf --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/img.cpp @@ -0,0 +1,211 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "img.h" + +bool Arene::empty() { + + if ((this->arene.height==0) || (this->arene.width==0)) return true; + else return false; +} + +Img::Img(ImageMat imgMatrice) { + this->img = imgMatrice.clone(); +} + +float Img::calculAngle(Position robot) { + float a = robot.direction.x - robot.center.x; + float b = robot.direction.y - robot.center.y ; + float angle = atan2(b,a); + return angle * 180.f/M_PI; +} + +float Img::calculAngle2(cv::Point2f pt1, cv::Point2f pt2) { + float a = pt1.x - pt2.x; + float b = pt1.y - pt2.y ; + float angle = atan2(b,a); + return angle * 180.f/M_PI; +} + +#ifdef __WITH_ARUCO__ +cv::Point2f Img::find_aruco_center(std::vector aruco) { + return ((aruco[0] + aruco[2])/2); +} + +cv::Point2f Img::find_aruco_direction(std::vector aruco) { + return ((aruco[0]+aruco[1])/2);; +} + +std::list Img::search_aruco(Arene monArene) { + ImageMat imgTraitment; + std::list positionList; + cv::Point2f areneCoor; + std::vector ids; + std::vector > corners; + if(monArene.empty()) + imgTraitment=this->img.clone(); + else{ + imgTraitment = cropArena(monArene); + areneCoor.x = monArene.x; + areneCoor.y = monArene.y; + } + cv::detectMarkers(imgTraitment,dictionary, corners, ids); + if(ids.size()>0){ + for(int i = 0 ; i < ids.size() ; i++){ + Position newPos; + newPos.center = find_aruco_center(corners[i]); + newPos.direction = find_aruco_direction(corners[i]); + newPos.robotId = ids[i]; + if(!monArene.empty()){ + newPos.direction += areneCoor; + newPos.center += areneCoor; + } + newPos.angle = calculAngle2(newPos.center, newPos.direction); + positionList.push_back(newPos); + } + } + return positionList; +} +#endif // __WITH_ARUCO__ + +float Img::euclideanDist(cv::Point2f p, cv::Point2f q) { + cv::Point diff = p - q; + return cv::sqrt(diff.x*diff.x + diff.y*diff.y); +} + +Jpg Img::toJpg() { + Jpg imgJpg; + cv::imencode(".jpg",this->img,imgJpg); + return imgJpg; +} + +std::list Img::search_robot(Arene monArene) { + + std::list robotsFind; + std::vector > contours; + std::vector approx; + std::vector hierarchy; + + ImageMat imgTraitment; + + if(monArene.empty()) + imgTraitment=this->img.clone(); + else + imgTraitment = cropArena(monArene); + + cvtColor(imgTraitment,imgTraitment,CV_RGB2GRAY); + threshold(imgTraitment,imgTraitment,128,255,CV_THRESH_BINARY); + findContours(imgTraitment, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point2f(0, 0)); + + for(unsigned int i = 0;i < contours.size();i++) + { + cv::approxPolyDP(ImageMat(contours[i]), approx, cv::arcLength(ImageMat(contours[i]), true)*0.17, true); + if(approx.size() == 3 && fabs(cv::contourArea(contours[i])) > 200 && fabs(cv::contourArea(contours[i])) < 700) + { + + cv::Point2f a,b,c; + cv::Point2f center; + + + a = approx[0]; + b = approx[1]; + c = approx[2]; + + + if(!monArene.empty()) // ajout de l'offset de l'arène + { + a.x += monArene.arene.x; + a.y += monArene.arene.y; + b.x += monArene.arene.x; + b.y += monArene.arene.y; + c.x += monArene.arene.x; + c.y += monArene.arene.y; + } + + center.x = (a.x + b.x + c.x)/3; + center.y = (a.y + b.y + c.y)/3; + Position newPos; + newPos.center=center; + + if(euclideanDist(center,b) > euclideanDist(center,a) && euclideanDist(center,b) > euclideanDist(center,c) ) + { + + newPos.direction=b; + //line(img,center,b,Scalar(0,125,0),2,8,0); + } + else if(euclideanDist(center,a) > euclideanDist(center,c)) + { + newPos.direction=a; + //line(img,center,a,Scalar(0,125,0),2,8,0); + + } + else + { + newPos.direction=c; + //line(img,center,c,Scalar(0,125,0),2,8,0); + } + newPos.angle=calculAngle(newPos); + robotsFind.push_back(newPos); + } + } + return robotsFind; +} + +Arene Img::search_arena() { + std::vector > contours; + std::vector approx; + std::vector hierarchy; + + ImageMat imageTrt; + cv::cvtColor(this->img,imageTrt,CV_RGB2GRAY); // conversion en niveau de gris + cv::threshold(imageTrt,imageTrt,128,255,CV_THRESH_BINARY); // Threshold les éléments les plus clair + cv::Canny(imageTrt, imageTrt, 100,200,3); // detection d'angle + + findContours(imageTrt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0)); + for(unsigned int i = 0; i < contours.size();i++) + { + approxPolyDP(ImageMat(contours[i]), approx, cv::arcLength(ImageMat(contours[i]), true)*0.1, true); + if(approx.size()==4 && fabs(cv::contourArea(contours[i])) > 100000) + { + Arene rectangle; + rectangle.arene = cv::boundingRect(ImageMat(contours[i])); + return rectangle; + } + } + return Arene(); +} + +int Img::draw_robot(Position robot) { + cv::arrowedLine(this->img, (cv::Point2f)robot.center, (cv::Point2f)robot.direction, cv::Scalar(0,0,255),3,8,0); + return 0; +} + +int Img::draw_all_robots(std::list robots) { + for(Position robot : robots){ + cv::arrowedLine(this->img, (cv::Point2f)robot.center, (cv::Point2f)robot.direction, cv::Scalar(0,0,255),3,8,0); + } + return robots.size(); +} + +int Img::draw_arena(Arene areneToDraw) { + cv::rectangle(this->img,areneToDraw.arene.tl(),areneToDraw.arene.br(),cv::Scalar(0,0,125),2,8,0); + return 0; +} + +ImageMat Img::cropArena(Arene arene) { + return this->img(arene.arene); +} diff --git a/software/raspberry/superviseur-robot/lib/img.h b/software/raspberry/superviseur-robot/lib/img.h new file mode 100644 index 0000000..1ddde5a --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/img.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __IMG_H__ +#define __IMG_H__ + +#include +#include + +#include +#include +#include + +#ifdef __WITH_ARUCO__ +#include +#include +#include +#endif // __WITH_ARUCO__ + +#define ARENA_NOT_DETECTED -1 + +typedef cv::Mat ImageMat; + +typedef std::vector Jpg; + +struct Position { + cv::Point2f center; + cv::Point2f direction; + float angle; + int robotId; +}; + +class Arene { +public: + Arene(); + + cv::Rect arene; + bool empty(); +}; + +class Img { +public: + Img(ImageMat imgMatrice); + Jpg toJpg(); + Arene search_arena(); + + int draw_robot(Position robot); + int draw_all_robots(std::list robots); + int draw_arena(Arene areneToDraw); + std::list search_robot(Arene monArene); + +#ifdef __WITH_ARUCO__ + std::list search_aruco(Arene monArene = NULL); +#endif // __WITH_ARUCO__ +private: + cv::Mat img; + +#ifdef __WITH_ARUCO__ + Ptr dictionary; + cv::Point2f find_aruco_center(std::vector aruco); + cv::Point2f find_aruco_direction(std::vector aruco); +#endif // __WITH_ARUCO__ + + float calculAngle(Position robots); + float calculAngle2(cv::Point2f pt1, cv::Point2f pt2); + float euclideanDist(cv::Point2f p, cv::Point2f q); + ImageMat cropArena(Arene arene); +}; + +#endif //__IMG_H__ diff --git a/software/raspberry/superviseur-robot/lib/src/message.cpp b/software/raspberry/superviseur-robot/lib/message.cpp similarity index 100% rename from software/raspberry/superviseur-robot/lib/src/message.cpp rename to software/raspberry/superviseur-robot/lib/message.cpp diff --git a/software/raspberry/superviseur-robot/lib/messages.cpp b/software/raspberry/superviseur-robot/lib/messages.cpp new file mode 100644 index 0000000..ede1297 --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/messages.cpp @@ -0,0 +1,327 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "messages.h" +#include +#include +#include + +/* + * Constants used with ToString method, for printing message id + */ + +const string MESSAGE_ID_STRING[] = { + "Empty", + "Log", + "Answer", + "Open serial com", + "Close serial com", + "Open camera", + "Close camera", + "Ask for arena", + "Arena confirmed", + "Arena infirmed", + "Compute position", + "Stop compute position", + "Position, + "Image", + "Robot ping", + "Robot reset", + "Robot start with wtachdog", + "Robot start without wtachdog", + "Robot reload watchdog", + "Robot move", + "Robot turn", + "Robot go forward", + "Robot go backward", + "Robot go left", + "Robot go right", + "Robot stop", + "Robot poweroff", + "Robot get battery", + "Robot battery level", + "Robot get state", + "Robot current state" + +}; + +/** + * Create a new, empty message + */ +Message::Message() { + this->messageID = MESSAGE_EMPTY; +} + +/** + * Destroy message + */ +Message::~Message() { +} + +/** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ +string Message::ToString() { + if (CheckID(this->messageID)) + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\""; + else + return "Invalid message"; +} + +/** + * Allocate a new mesage and copy contents of current message + * @return A message, copy of current + */ +Message* Message::Copy() { + Message *msg = new Message(); + + return msg; +} + +/** + * Get message ID + * @return Current message ID + */ +bool Message::CheckID(MessageID id) { + if ((id != MESSAGE_EMPTY) && + (id != MESSAGE_ARENA_CONFIRM) && + (id != MESSAGE_ARENA_INFIRM) && + (id != MESSAGE_ASK_ARENA) && + (id != MESSAGE_CAM_CLOSE) && + (id != MESSAGE_CAM_OPEN) && + (id != MESSAGE_CLOSE_COM) && + (id != MESSAGE_COMPUTE_POSITION) && + (id != MESSAGE_OPEN_COM) && + (id != MESSAGE_ROBOT_GET_BATTERY) && + (id != MESSAGE_ROBOT_GET_STATE) && + (id != MESSAGE_ROBOT_GO_BACK) && + (id != MESSAGE_ROBOT_GO_FORWARD) && + (id != MESSAGE_ROBOT_GO_LEFT) && + (id != MESSAGE_ROBOT_GO_RIGHT) && + (id != MESSAGE_ROBOT_PING) && + (id != MESSAGE_ROBOT_POWEROFF) && + (id != MESSAGE_ROBOT_RELOAD_WD) && + (id != MESSAGE_ROBOT_RESET) && + (id != MESSAGE_ROBOT_START_WITHOUT_WD) && + (id != MESSAGE_ROBOT_START_WITH_WD) && + (id != MESSAGE_ROBOT_STOP) && + (id != MESSAGE_STOP_COMPUTE_POSITION)) { + return false; + } else return true; +} + +/* MessageFloat */ + +/** + * Create a new, empty float message + */ +MessageFloat::MessageFloat() { + value = 0.0; +} + +/** + * Create a new float message, with given ID and value + * @param id Message ID + * @param val Message value + * @throw std::runtime_error if message ID is incompatible with float data + */ +MessageFloat::MessageFloat(MessageID id, float val) { + MessageFloat::SetID(id); + + value = val; +} + +/** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with float data + */ +void MessageFloat::SetID(MessageID id) { + if (CheckID(id)) + messageID = id; + else + throw std::runtime_error { + "Invalid message id for MessageFloat" + }; +} + +/** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ +string MessageFloat::ToString() { + if (CheckID(this->messageID)) + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nValue: " + to_string(this->value); + else + return "Invalid message"; +} + +/** + * Allocate a new mesage and copy contents of current message + * @return A message, copy of current + */ +Message* MessageFloat::Copy() { + return new MessageFloat(this->messageID, this->value); +} + +/** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ +bool MessageFloat::CheckID(MessageID id) { + if ((id != MESSAGE_ANGLE_POSITION) && + (id != MESSAGE_ANGULAR_SPEED) && + (id != MESSAGE_BATTERY) && + (id != MESSAGE_BETA) && + (id != MESSAGE_LINEAR_SPEED) && + (id != MESSAGE_TORQUE)) { + return false; + } else return true; +} + +/* class MessageString */ + +/** + * Create a new, empty string message + */ +MessageString::MessageString() { + s = string(""); +} + +/** + * Create a new string message, with given ID and string + * @param id Message ID + * @param s Message string + * @throw std::runtime_error if message ID is incompatible with string data + */ +MessageString::MessageString(MessageID id, string s) { + MessageString::SetID(id); + + this->s = s; +} + +/** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with string data + */ +void MessageString::SetID(MessageID id) { + if (CheckID(id)) + messageID = id; + else + throw std::runtime_error { + "Invalid message id for MessageString" + }; +} + +/** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ +string MessageString::ToString() { + if (CheckID(this->messageID)) + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nString: \"" + this->s + "\""; + else + return "Invalid message"; +} + +/** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ +Message* MessageString::Copy() { + return new MessageString(this->messageID, this->s); +} + +/** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ +bool MessageString::CheckID(MessageID id) { + if ((id != MESSAGE_LOG)) { + return false; + } else return true; +} + +/* class MessageBool */ + +/** + * Create a new, empty boolean message + */ +MessageBool::MessageBool() { + state = false; +} + +/** + * Create a new boolean message, with given ID and boolean value + * @param id Message ID + * @param state Boolean value + * @throw std::runtime_error if message ID is incompatible with boolean data + */ +MessageBool::MessageBool(MessageID id, bool state) { + MessageBool::SetID(id); + + this->state = state; +} + +/** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with boolean data + */ +void MessageBool::SetID(MessageID id) { + if (CheckID(id)) + messageID = id; + else + throw std::runtime_error { + "Invalid message id for MessageBool" + }; +} + +/** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ +string MessageBool::ToString() { + if (CheckID(this->messageID)) + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nState: \"" + to_string(this->state) + "\""; + else + return "Invalid message"; +} + +/** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ +Message* MessageBool::Copy() { + return new MessageBool(this->messageID, this->state); +} + +/** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ +bool MessageBool::CheckID(MessageID id) { + if ((id != MESSAGE_EMERGENCY_STOP) && + (id != MESSAGE_USER_PRESENCE)) { + return false; + } else return true; +} diff --git a/software/raspberry/superviseur-robot/lib/messages.h b/software/raspberry/superviseur-robot/lib/messages.h new file mode 100644 index 0000000..1d8b8a8 --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/messages.h @@ -0,0 +1,786 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __MESSAGES_H__ +#define __MESSAGES_H__ + +#include +#include "img.h" + +/** + * Message ID defined for system communication + * + * @brief List of available message ID + * + */ +typedef enum { + //Generic messages + MESSAGE_EMPTY = 0, + MESSAGE_LOG, + + // Message containing answer (after robot command, or for monitor) + MESSAGE_ANSWER, + + // messages for serial communication with robot + MESSAGE_OPEN_COM, + MESSAGE_CLOSE_COM, + + // Messages for camera + MESSAGE_CAM_OPEN, + MESSAGE_CAM_CLOSE, + MESSAGE_ASK_ARENA, + MESSAGE_ARENA_CONFIRM, + MESSAGE_ARENA_INFIRM, + MESSAGE_COMPUTE_POSITION, + MESSAGE_STOP_COMPUTE_POSITION, + MESSAGE_POSITION, + MESSAGE_IMAGE, + + // Messages for robot + MESSAGE_ROBOT_PING, + MESSAGE_ROBOT_RESET, + MESSAGE_ROBOT_START_WITH_WD, + MESSAGE_ROBOT_START_WITHOUT_WD, + MESSAGE_ROBOT_RELOAD_WD, + MESSAGE_ROBOT_MOVE, + MESSAGE_ROBOT_TURN, + MESSAGE_ROBOT_GO_FORWARD, + MESSAGE_ROBOT_GO_BACK, + MESSAGE_ROBOT_GO_LEFT, + MESSAGE_ROBOT_GO_RIGHT, + MESSAGE_ROBOT_STOP, + MESSAGE_ROBOT_POWEROFF, + MESSAGE_ROBOT_GET_BATTERY, + MESSAGE_ROBOT_BATTERY_LEVEL, + MESSAGE_ROBOT_GET_STATE, + MESSAGE_ROBOT_CURRENT_STATE +} MessageID; + +typedef enum { + ANSWER_ACK=0, + ANSWER_NACK, + ANSWER_LOST_ROBOT, + ANSWER_ROBOT_TIMEOUT, + ANSWER_ROBOT_UNKNWON_COMMAND, + ANSWER_ROBOT_ERROR, + ANSWER_ROBOT_CHECKSUM +} AnswerID; + +typedef enum { + BATTERY_EMPTY=0, + BATTERY_LOW, + BATTERY_FULL +} BatteryLevel; + +typedef enum { + ROBOT_NOT_BUSY=0, + ROBOT_BUSY +} RobotState; + +using namespace std; + +/** + * Base class for messaging + * + * @brief Base class for messaging + * + */ +class Message { +public: + /** + * Create a new, empty message + */ + Message(); + + /** + * Destroy message + */ + virtual ~Message(); + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + virtual string ToString(); + + /** + * Allocate a new mesage and copy contents of current message + * @return A message, copy of current + */ + virtual Message* Copy(); + + /** + * Get message ID + * @return Current message ID + */ + MessageID GetID() { + return messageID; + } + + /** + * Set message ID + * @param id Message ID + */ + virtual void SetID(MessageID id) { + } + + /** + * Comparison operator + * @param msg Message to be compared + * @return true if message are equal, false otherwise + */ + virtual bool operator==(const Message& msg) { + return (messageID == msg.messageID); + } + + /** + * Difference operator + * @param msg Message to be compared + * @return true if message are different, false otherwise + */ + virtual bool operator!=(const Message& msg) { + return !(messageID == msg.messageID); + } + +protected: + /** + * Message identifier (@see MessageID) + */ + MessageID messageID; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + virtual bool CheckID(MessageID id); +}; + + +/** + * Message class for holding float value, based on Message class + * + * @brief Float message class + * + */ +class MessageInt : public Message { +public: + /** + * Create a new, empty float message + */ + MessageInt(); + + /** + * Create a new float message, with given ID and value + * @param id Message ID + * @param val Message value + * @throw std::runtime_error if message ID is incompatible with float data + */ + MessageInt(MessageID id, int val); + + /** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with float data + */ + void SetID(MessageID id); + + /** + * Get message value (int) + * @return int value + */ + int GetValue() { + return value; + } + + /** + * Set message value (int) + * @param val int value to store in message + */ + void SetValue(int val) { + this->value = val; + } + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + string ToString(); + + /** + * Allocate a new mesage and copy contents of current message + * @return A message, copy of current + */ + Message* Copy(); + + /** + * Comparison operator + * @param msg Message to be compared + * @return true if message are equal, false otherwise + */ + virtual bool operator==(const MessageInt& msg) { + return ((messageID == msg.messageID) && (value == msg.value)); + } + + /** + * Difference operator + * @param msg Message to be compared + * @return true if message are different, false otherwise + */ + virtual bool operator!=(const MessageInt& msg) { + return !((messageID == msg.messageID) && (value == msg.value)); + } + +protected: + /** + * Message integer value + */ + int value; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + bool CheckID(MessageID id); +}; + +/** + * Message class for holding float value, based on Message class + * + * @brief Float message class + * + */ +class MessageFloat : public Message { +public: + /** + * Create a new, empty float message + */ + MessageFloat(); + + /** + * Create a new float message, with given ID and value + * @param id Message ID + * @param val Message value + * @throw std::runtime_error if message ID is incompatible with float data + */ + MessageFloat(MessageID id, float val); + + /** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with float data + */ + void SetID(MessageID id); + + /** + * Get message value (float) + * @return Float value + */ + float GetValue() { + return value; + } + + /** + * Set message value (float) + * @param val Float value to store in message + */ + void SetValue(float val) { + this->value = val; + } + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + string ToString(); + + /** + * Allocate a new mesage and copy contents of current message + * @return A message, copy of current + */ + Message* Copy(); + + /** + * Comparison operator + * @param msg Message to be compared + * @return true if message are equal, false otherwise + */ + virtual bool operator==(const MessageFloat& msg) { + return ((messageID == msg.messageID) && (value == msg.value)); + } + + /** + * Difference operator + * @param msg Message to be compared + * @return true if message are different, false otherwise + */ + virtual bool operator!=(const MessageFloat& msg) { + return !((messageID == msg.messageID) && (value == msg.value)); + } +protected: + /** + * Message float value + */ + float value; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + bool CheckID(MessageID id); +}; + +/** + * Message class for holding string value, based on Message class + * + * @brief String message class + * + */ +class MessageString : public Message { +public: + /** + * Create a new, empty string message + */ + MessageString(); + + /** + * Create a new string message, with given ID and string + * @param id Message ID + * @param s Message string + * @throw std::runtime_error if message ID is incompatible with string data + */ + MessageString(MessageID id, string s); + + /** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with string data + */ + void SetID(MessageID id); + + /** + * Get message string + * @return String + */ + string GetString() { + return s; + } + + /** + * Set message string + * @param s String to store in message + */ + void SetString(string s) { + this->s = s; + } + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + string ToString(); + + /** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ + Message* Copy(); + + /** + * Comparison operator + * @param msg Message to be compared + * @return true if message are equal, false otherwise + */ + virtual bool operator==(const MessageString& msg) { + return ((messageID == msg.messageID) && (s == msg.s)); + } + + /** + * Difference operator + * @param msg Message to be compared + * @return true if message are different, false otherwise + */ + virtual bool operator!=(const MessageString& msg) { + return !((messageID == msg.messageID) && (s == msg.s)); + } +protected: + /** + * Message content + */ + string s; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + bool CheckID(MessageID id); +}; + +/** + * Message class for holding image, based on Message class + * + * @brief Image message class + * + */ +class MessageImg : public Message { +public: + /** + * Create a new, empty image message + */ + MessageImg(); + + /** + * Create a new image message, with given ID and boolean value + * @param id Message ID + * @param image Pointer to image + * @throw std::runtime_error if message ID is incompatible with image message + */ + MessageImg(MessageID id, Img* image); + + /** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible withimage message + */ + void SetID(MessageID id); + + /** + * Get message image + * @return Pointer to image + */ + Img* GetImage() { + return image; + } + + /** + * Set message image + * @param image Pointer to image object + */ + void SetImage(Img* image) { + this->image = image; + } + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + string ToString(); + + /** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ + Message* Copy(); + +protected: + /** + * Message image + */ + Img* image; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + bool CheckID(MessageID id); +}; + +/** + * Message class for holding position, based on Message class + * + * @brief Position message class + * + */ +class MessagePosition : public Message { +public: + /** + * Create a new, empty image message + */ + MessagePosition(); + + /** + * Create a new image message, with given ID and boolean value + * @param id Message ID + * @param image Pointer to image + * @throw std::runtime_error if message ID is incompatible with image message + */ + MessagePosition(MessageID id, Position pos); + + /** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible withimage message + */ + void SetID(MessageID id); + + /** + * Get message image + * @return Pointer to image + */ + Position GetPosition() { + return pos; + } + + /** + * Set message image + * @param image Pointer to image object + */ + void SetPosition(Position pos) { + this->pos = pos; + } + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + string ToString(); + + /** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ + Message* Copy(); + +protected: + /** + * Message position + */ + Position pos; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + bool CheckID(MessageID id); +}; + +/** + * Message class for holding battery level, based on Message class + * + * @brief Position message class + * + */ +class MessageBattery : public Message { +public: + /** + * Create a new, empty image message + */ + MessageBattery(); + + /** + * Create a new image message, with given ID and boolean value + * @param id Message ID + * @param image Pointer to image + * @throw std::runtime_error if message ID is incompatible with image message + */ + MessageBattery(MessageID id, BatteryLevel level); + + /** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible withimage message + */ + void SetID(MessageID id); + + /** + * Get message image + * @return Pointer to image + */ + BatteryLevel GetLevel() { + return level; + } + + /** + * Set message image + * @param image Pointer to image object + */ + void SetLevel(BatteryLevel level) { + this->level = level; + } + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + string ToString(); + + /** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ + Message* Copy(); + +protected: + /** + * Message position + */ + BatteryLevel level; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + bool CheckID(MessageID id); +}; + +/** + * Message class for holding answer, based on Message class + * + * @brief Answer message class + * + */ +class MessageAnswer : public Message { +public: + /** + * Create a new, empty image message + */ + MessageAnswer(); + + /** + * Create a new image message, with given ID and boolean value + * @param id Message ID + * @param image Pointer to image + * @throw std::runtime_error if message ID is incompatible with image message + */ + MessageAnswer(MessageID id, AnswerID answer); + + /** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible withimage message + */ + void SetID(MessageID id); + + /** + * Get message image + * @return Pointer to image + */ + AnswerID GetAnswer() { + return answer; + } + + /** + * Set message image + * @param image Pointer to image object + */ + void SetAnswer(AnswerID answer) { + this->answer = answer; + } + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + string ToString(); + + /** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ + Message* Copy(); + +protected: + /** + * Message answer + */ + AnswerID answer; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + bool CheckID(MessageID id); +}; + +/** + * Message class for holding robot state, based on Message class + * + * @brief Answer message class + * + */ +class MessageState: public Message { +public: + /** + * Create a new, empty image message + */ + MessageState(); + + /** + * Create a new image message, with given ID and boolean value + * @param id Message ID + * @param image Pointer to image + * @throw std::runtime_error if message ID is incompatible with image message + */ + MessageState(MessageID id, RobotState state); + + /** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible withimage message + */ + void SetID(MessageID id); + + /** + * Get message image + * @return Pointer to image + */ + RobotState GetState() { + return state; + } + + /** + * Set message image + * @param image Pointer to image object + */ + void SetState(RobotState state) { + this->state = state; + } + + /** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ + string ToString(); + + /** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ + Message* Copy(); + +protected: + /** + * Message answer + */ + RobotState state; + + /** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ + bool CheckID(MessageID id); +}; +#endif /* __MESSAGES_H__ */ + diff --git a/software/raspberry/superviseur-robot/lib/src/monitor.cpp b/software/raspberry/superviseur-robot/lib/monitor.cpp similarity index 100% rename from software/raspberry/superviseur-robot/lib/src/monitor.cpp rename to software/raspberry/superviseur-robot/lib/monitor.cpp diff --git a/software/raspberry/superviseur-robot/lib/src/robot.cpp b/software/raspberry/superviseur-robot/lib/robot.cpp similarity index 100% rename from software/raspberry/superviseur-robot/lib/src/robot.cpp rename to software/raspberry/superviseur-robot/lib/robot.cpp diff --git a/software/raspberry/superviseur-robot/lib/src/server.cpp b/software/raspberry/superviseur-robot/lib/server.cpp similarity index 100% rename from software/raspberry/superviseur-robot/lib/src/server.cpp rename to software/raspberry/superviseur-robot/lib/server.cpp diff --git a/software/raspberry/superviseur-robot/superviseur/src/main.cpp b/software/raspberry/superviseur-robot/main.cpp similarity index 99% rename from software/raspberry/superviseur-robot/superviseur/src/main.cpp rename to software/raspberry/superviseur-robot/main.cpp index 5737e45..7988a7a 100644 --- a/software/raspberry/superviseur-robot/superviseur/src/main.cpp +++ b/software/raspberry/superviseur-robot/main.cpp @@ -34,7 +34,7 @@ #include #include -#include "functions.h" +#include "tasks.h" // Déclaration des taches RT_TASK th_server; diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-Debug.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug.mk new file mode 100644 index 0000000..ce4f453 --- /dev/null +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug.mk @@ -0,0 +1,119 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Environment +MKDIR=mkdir +CP=cp +GREP=grep +NM=nm +CCADMIN=CCadmin +RANLIB=ranlib +CC=gcc +CCC=g++ +CXX=g++ +FC=gfortran +AS=as + +# Macros +CND_PLATFORM=GNU-Linux +CND_DLIB_EXT=so +CND_CONF=Debug +CND_DISTDIR=dist +CND_BUILDDIR=build + +# Include project Makefile +include ./Makefile + +# Object Directory +OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} + +# Object Files +OBJECTFILES= \ + ${OBJECTDIR}/lib/message.o \ + ${OBJECTDIR}/lib/messages.o \ + ${OBJECTDIR}/lib/monitor.o \ + ${OBJECTDIR}/lib/robot.o \ + ${OBJECTDIR}/lib/server.o \ + ${OBJECTDIR}/main.o \ + ${OBJECTDIR}/tasks.o + + +# C Compiler Flags +CFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + +# CC Compiler Flags +CCFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy +CXXFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + +# Fortran Compiler Flags +FFLAGS= + +# Assembler Flags +ASFLAGS= + +# Link Libraries and Options +LDLIBSOPTIONS=`pkg-config --libs opencv` + +# Build Targets +.build-conf: ${BUILD_SUBPROJECTS} + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot + +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot: ${OBJECTFILES} + ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot ${OBJECTFILES} ${LDLIBSOPTIONS} -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt + +${OBJECTDIR}/lib/message.o: lib/message.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/message.o lib/message.cpp + +${OBJECTDIR}/lib/messages.o: lib/messages.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/messages.o lib/messages.cpp + +${OBJECTDIR}/lib/monitor.o: lib/monitor.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/monitor.o lib/monitor.cpp + +${OBJECTDIR}/lib/robot.o: lib/robot.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/robot.o lib/robot.cpp + +${OBJECTDIR}/lib/server.o: lib/server.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/server.o lib/server.cpp + +${OBJECTDIR}/main.o: main.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp + +${OBJECTDIR}/tasks.o: tasks.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp + +# Subprojects +.build-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${CND_BUILDDIR}/${CND_CONF} + +# Subprojects +.clean-subprojects: + +# Enable dependency checking +.dep.inc: .depcheck-impl + +include .dep.inc diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk new file mode 100644 index 0000000..702a517 --- /dev/null +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk @@ -0,0 +1,125 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Environment +MKDIR=mkdir +CP=cp +GREP=grep +NM=nm +CCADMIN=CCadmin +RANLIB=ranlib +CC=gcc +CCC=g++ +CXX=g++ +FC=gfortran +AS=as + +# Macros +CND_PLATFORM=GNU-Linux +CND_DLIB_EXT=so +CND_CONF=Debug__RPI_ +CND_DISTDIR=dist +CND_BUILDDIR=build + +# Include project Makefile +include ./Makefile + +# Object Directory +OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} + +# Object Files +OBJECTFILES= \ + ${OBJECTDIR}/lib/image.o \ + ${OBJECTDIR}/lib/message.o \ + ${OBJECTDIR}/lib/messages.o \ + ${OBJECTDIR}/lib/monitor.o \ + ${OBJECTDIR}/lib/robot.o \ + ${OBJECTDIR}/lib/server.o \ + ${OBJECTDIR}/main.o \ + ${OBJECTDIR}/tasks.o + + +# C Compiler Flags +CFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + +# CC Compiler Flags +CCFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy +CXXFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + +# Fortran Compiler Flags +FFLAGS= + +# Assembler Flags +ASFLAGS= + +# Link Libraries and Options +LDLIBSOPTIONS=`pkg-config --libs opencv` -lraspicam_cv -lraspicam + +# Build Targets +.build-conf: ${BUILD_SUBPROJECTS} + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot + +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot: ${OBJECTFILES} + ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot ${OBJECTFILES} ${LDLIBSOPTIONS} -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt + +${OBJECTDIR}/lib/image.o: lib/image.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/image.o lib/image.cpp + +${OBJECTDIR}/lib/message.o: lib/message.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/message.o lib/message.cpp + +${OBJECTDIR}/lib/messages.o: lib/messages.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/messages.o lib/messages.cpp + +${OBJECTDIR}/lib/monitor.o: lib/monitor.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/monitor.o lib/monitor.cpp + +${OBJECTDIR}/lib/robot.o: lib/robot.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/robot.o lib/robot.cpp + +${OBJECTDIR}/lib/server.o: lib/server.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/server.o lib/server.cpp + +${OBJECTDIR}/main.o: main.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp + +${OBJECTDIR}/tasks.o: tasks.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp + +# Subprojects +.build-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${CND_BUILDDIR}/${CND_CONF} + +# Subprojects +.clean-subprojects: + +# Enable dependency checking +.dep.inc: .depcheck-impl + +include .dep.inc diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-Release.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-Release.mk new file mode 100644 index 0000000..fa26549 --- /dev/null +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-Release.mk @@ -0,0 +1,125 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Environment +MKDIR=mkdir +CP=cp +GREP=grep +NM=nm +CCADMIN=CCadmin +RANLIB=ranlib +CC=gcc +CCC=g++ +CXX=g++ +FC=gfortran +AS=as + +# Macros +CND_PLATFORM=GNU-Linux +CND_DLIB_EXT=so +CND_CONF=Release +CND_DISTDIR=dist +CND_BUILDDIR=build + +# Include project Makefile +include ./Makefile + +# Object Directory +OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} + +# Object Files +OBJECTFILES= \ + ${OBJECTDIR}/lib/image.o \ + ${OBJECTDIR}/lib/message.o \ + ${OBJECTDIR}/lib/messages.o \ + ${OBJECTDIR}/lib/monitor.o \ + ${OBJECTDIR}/lib/robot.o \ + ${OBJECTDIR}/lib/server.o \ + ${OBJECTDIR}/main.o \ + ${OBJECTDIR}/tasks.o + + +# C Compiler Flags +CFLAGS= + +# CC Compiler Flags +CCFLAGS= +CXXFLAGS= + +# Fortran Compiler Flags +FFLAGS= + +# Assembler Flags +ASFLAGS= + +# Link Libraries and Options +LDLIBSOPTIONS= + +# Build Targets +.build-conf: ${BUILD_SUBPROJECTS} + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot + +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot: ${OBJECTFILES} + ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot ${OBJECTFILES} ${LDLIBSOPTIONS} + +${OBJECTDIR}/lib/image.o: lib/image.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/image.o lib/image.cpp + +${OBJECTDIR}/lib/message.o: lib/message.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/message.o lib/message.cpp + +${OBJECTDIR}/lib/messages.o: lib/messages.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/messages.o lib/messages.cpp + +${OBJECTDIR}/lib/monitor.o: lib/monitor.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/monitor.o lib/monitor.cpp + +${OBJECTDIR}/lib/robot.o: lib/robot.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/robot.o lib/robot.cpp + +${OBJECTDIR}/lib/server.o: lib/server.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/server.o lib/server.cpp + +${OBJECTDIR}/main.o: main.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp + +${OBJECTDIR}/tasks.o: tasks.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp + +# Subprojects +.build-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${CND_BUILDDIR}/${CND_CONF} + +# Subprojects +.clean-subprojects: + +# Enable dependency checking +.dep.inc: .depcheck-impl + +include .dep.inc diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-impl.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-impl.mk similarity index 99% rename from software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-impl.mk rename to software/raspberry/superviseur-robot/nbproject/Makefile-impl.mk index 6990172..24d259d 100644 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-impl.mk +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-impl.mk @@ -24,7 +24,7 @@ CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} # Project Name -PROJECTNAME=superviseur +PROJECTNAME=superviseur-robot # Active Configuration DEFAULTCONF=Debug diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-variables.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk similarity index 69% rename from software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-variables.mk rename to software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk index 50873f1..9dbbe3a 100644 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-variables.mk +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk @@ -9,27 +9,27 @@ CND_DISTDIR=dist # Debug configuration CND_PLATFORM_Debug=GNU-Linux CND_ARTIFACT_DIR_Debug=dist/Debug/GNU-Linux -CND_ARTIFACT_NAME_Debug=superviseur -CND_ARTIFACT_PATH_Debug=dist/Debug/GNU-Linux/superviseur +CND_ARTIFACT_NAME_Debug=superviseur-robot +CND_ARTIFACT_PATH_Debug=dist/Debug/GNU-Linux/superviseur-robot CND_PACKAGE_DIR_Debug=dist/Debug/GNU-Linux/package -CND_PACKAGE_NAME_Debug=superviseur.tar -CND_PACKAGE_PATH_Debug=dist/Debug/GNU-Linux/package/superviseur.tar +CND_PACKAGE_NAME_Debug=superviseur-robot.tar +CND_PACKAGE_PATH_Debug=dist/Debug/GNU-Linux/package/superviseur-robot.tar # Release configuration CND_PLATFORM_Release=GNU-Linux CND_ARTIFACT_DIR_Release=dist/Release/GNU-Linux -CND_ARTIFACT_NAME_Release=superviseur -CND_ARTIFACT_PATH_Release=dist/Release/GNU-Linux/superviseur +CND_ARTIFACT_NAME_Release=superviseur-robot +CND_ARTIFACT_PATH_Release=dist/Release/GNU-Linux/superviseur-robot CND_PACKAGE_DIR_Release=dist/Release/GNU-Linux/package -CND_PACKAGE_NAME_Release=superviseur.tar -CND_PACKAGE_PATH_Release=dist/Release/GNU-Linux/package/superviseur.tar +CND_PACKAGE_NAME_Release=superviseur-robot.tar +CND_PACKAGE_PATH_Release=dist/Release/GNU-Linux/package/superviseur-robot.tar # Debug__RPI_ configuration CND_PLATFORM_Debug__RPI_=GNU-Linux CND_ARTIFACT_DIR_Debug__RPI_=dist/Debug__RPI_/GNU-Linux -CND_ARTIFACT_NAME_Debug__RPI_=superviseur -CND_ARTIFACT_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/superviseur +CND_ARTIFACT_NAME_Debug__RPI_=superviseur-robot +CND_ARTIFACT_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/superviseur-robot CND_PACKAGE_DIR_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/package -CND_PACKAGE_NAME_Debug__RPI_=superviseur.tar -CND_PACKAGE_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/package/superviseur.tar +CND_PACKAGE_NAME_Debug__RPI_=superviseur-robot.tar +CND_PACKAGE_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/package/superviseur-robot.tar # # include compiler specific variables # diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/Package-Debug.bash b/software/raspberry/superviseur-robot/nbproject/Package-Debug.bash similarity index 88% rename from software/raspberry/superviseur-robot/superviseur/nbproject/Package-Debug.bash rename to software/raspberry/superviseur-robot/nbproject/Package-Debug.bash index 7491245..10fd194 100644 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/Package-Debug.bash +++ b/software/raspberry/superviseur-robot/nbproject/Package-Debug.bash @@ -13,9 +13,9 @@ CND_BUILDDIR=build CND_DLIB_EXT=so NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging TMPDIRNAME=tmp-packaging -OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur -OUTPUT_BASENAME=superviseur -PACKAGE_TOP_DIR=superviseur/ +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot +OUTPUT_BASENAME=superviseur-robot +PACKAGE_TOP_DIR=superviseur-robot/ # Functions function checkReturnCode @@ -60,15 +60,15 @@ mkdir -p ${NBTMPDIR} # Copy files and create directories and links cd "${TOP}" -makeDirectory "${NBTMPDIR}/superviseur/bin" +makeDirectory "${NBTMPDIR}/superviseur-robot/bin" copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 # Generate tar file cd "${TOP}" -rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur.tar +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur-robot.tar cd ${NBTMPDIR} -tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur.tar * +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur-robot.tar * checkReturnCode # Cleanup diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/Package-Debug__RPI_.bash b/software/raspberry/superviseur-robot/nbproject/Package-Debug__RPI_.bash similarity index 88% rename from software/raspberry/superviseur-robot/superviseur/nbproject/Package-Debug__RPI_.bash rename to software/raspberry/superviseur-robot/nbproject/Package-Debug__RPI_.bash index 497c884..f42ce09 100644 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/Package-Debug__RPI_.bash +++ b/software/raspberry/superviseur-robot/nbproject/Package-Debug__RPI_.bash @@ -13,9 +13,9 @@ CND_BUILDDIR=build CND_DLIB_EXT=so NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging TMPDIRNAME=tmp-packaging -OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur -OUTPUT_BASENAME=superviseur -PACKAGE_TOP_DIR=superviseur/ +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot +OUTPUT_BASENAME=superviseur-robot +PACKAGE_TOP_DIR=superviseur-robot/ # Functions function checkReturnCode @@ -60,15 +60,15 @@ mkdir -p ${NBTMPDIR} # Copy files and create directories and links cd "${TOP}" -makeDirectory "${NBTMPDIR}/superviseur/bin" +makeDirectory "${NBTMPDIR}/superviseur-robot/bin" copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 # Generate tar file cd "${TOP}" -rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur.tar +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur-robot.tar cd ${NBTMPDIR} -tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur.tar * +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur-robot.tar * checkReturnCode # Cleanup diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/Package-Release.bash b/software/raspberry/superviseur-robot/nbproject/Package-Release.bash similarity index 88% rename from software/raspberry/superviseur-robot/superviseur/nbproject/Package-Release.bash rename to software/raspberry/superviseur-robot/nbproject/Package-Release.bash index 76f5a7f..13f4fa7 100644 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/Package-Release.bash +++ b/software/raspberry/superviseur-robot/nbproject/Package-Release.bash @@ -13,9 +13,9 @@ CND_BUILDDIR=build CND_DLIB_EXT=so NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging TMPDIRNAME=tmp-packaging -OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur -OUTPUT_BASENAME=superviseur -PACKAGE_TOP_DIR=superviseur/ +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot +OUTPUT_BASENAME=superviseur-robot +PACKAGE_TOP_DIR=superviseur-robot/ # Functions function checkReturnCode @@ -60,15 +60,15 @@ mkdir -p ${NBTMPDIR} # Copy files and create directories and links cd "${TOP}" -makeDirectory "${NBTMPDIR}/superviseur/bin" +makeDirectory "${NBTMPDIR}/superviseur-robot/bin" copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 # Generate tar file cd "${TOP}" -rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur.tar +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur-robot.tar cd ${NBTMPDIR} -tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur.tar * +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur-robot.tar * checkReturnCode # Cleanup diff --git a/software/raspberry/superviseur-robot/nbproject/configurations.xml b/software/raspberry/superviseur-robot/nbproject/configurations.xml new file mode 100644 index 0000000..a8a96fb --- /dev/null +++ b/software/raspberry/superviseur-robot/nbproject/configurations.xml @@ -0,0 +1,270 @@ + + + + + ./lib/camera.h + ./lib/definitions.h + ./lib/image.h + ./lib/img.h + ./lib/message.h + ./lib/messages.h + ./lib/monitor.h + ./lib/robot.h + ./lib/server.h + ./tasks.h + + + ./gdbsudo.sh + + + ./lib/camera.cpp + ./lib/image.cpp + ./lib/img.cpp + ./main.cpp + ./lib/message.cpp + ./lib/messages.cpp + ./lib/monitor.cpp + ./lib/robot.cpp + ./lib/server.cpp + ./tasks.cpp + + + + + ./Makefile + + + ./Makefile + + + + default + true + false + + + + + ./ + ./lib + + -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + + + + ./ + ./lib + /usr/xenomai/include + /usr/xenomai/include/mercury + + -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + + _WITH_TRACE_ + __FOR_PC__ + + + + + `pkg-config --libs opencv` + + -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + true + false + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GNU|GNU + true + false + + + + + ./ + ./lib + /usr/xenomai/include + /usr/xenomai/include/mercury + + -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + + + + ./ + ./lib + /usr/xenomai/include + /usr/xenomai/include/mercury + + -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + + _WITH_TRACE_ + + + + + `pkg-config --libs opencv` + raspicam_cv + raspicam + + -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/private/Makefile-variables.mk b/software/raspberry/superviseur-robot/nbproject/private/Makefile-variables.mk similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/nbproject/private/Makefile-variables.mk rename to software/raspberry/superviseur-robot/nbproject/private/Makefile-variables.mk diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/private/c_standard_headers_indexer.c b/software/raspberry/superviseur-robot/nbproject/private/c_standard_headers_indexer.c similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/nbproject/private/c_standard_headers_indexer.c rename to software/raspberry/superviseur-robot/nbproject/private/c_standard_headers_indexer.c diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/private/configurations.xml b/software/raspberry/superviseur-robot/nbproject/private/configurations.xml similarity index 98% rename from software/raspberry/superviseur-robot/superviseur/nbproject/private/configurations.xml rename to software/raspberry/superviseur-robot/nbproject/private/configurations.xml index 9835210..393661c 100644 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/private/configurations.xml +++ b/software/raspberry/superviseur-robot/nbproject/private/configurations.xml @@ -1,6 +1,6 @@ - Makefile + ./Makefile diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/private/cpp_standard_headers_indexer.cpp b/software/raspberry/superviseur-robot/nbproject/private/cpp_standard_headers_indexer.cpp similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/nbproject/private/cpp_standard_headers_indexer.cpp rename to software/raspberry/superviseur-robot/nbproject/private/cpp_standard_headers_indexer.cpp diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/private/downloads-10.105.1.13-pi-22 b/software/raspberry/superviseur-robot/nbproject/private/downloads-10.105.1.13-pi-22 similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/nbproject/private/downloads-10.105.1.13-pi-22 rename to software/raspberry/superviseur-robot/nbproject/private/downloads-10.105.1.13-pi-22 diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/private/launcher.properties b/software/raspberry/superviseur-robot/nbproject/private/launcher.properties similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/nbproject/private/launcher.properties rename to software/raspberry/superviseur-robot/nbproject/private/launcher.properties diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/private/private.xml b/software/raspberry/superviseur-robot/nbproject/private/private.xml similarity index 72% rename from software/raspberry/superviseur-robot/superviseur/nbproject/private/private.xml rename to software/raspberry/superviseur-robot/nbproject/private/private.xml index b361df8..7a2adea 100644 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/private/private.xml +++ b/software/raspberry/superviseur-robot/nbproject/private/private.xml @@ -2,24 +2,24 @@ 1 - 2 + 0 file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/monitor.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.cpp - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/server.cpp - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/main.cpp - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/robot.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/img.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/img.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/robot.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/image.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/server.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/message.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/message.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/main.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.cpp diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/private/timestamps-10.105.1.13-pi-22 b/software/raspberry/superviseur-robot/nbproject/private/timestamps-10.105.1.13-pi-22 similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/nbproject/private/timestamps-10.105.1.13-pi-22 rename to software/raspberry/superviseur-robot/nbproject/private/timestamps-10.105.1.13-pi-22 diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/project.properties b/software/raspberry/superviseur-robot/nbproject/project.properties similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/nbproject/project.properties rename to software/raspberry/superviseur-robot/nbproject/project.properties diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/project.xml b/software/raspberry/superviseur-robot/nbproject/project.xml similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/nbproject/project.xml rename to software/raspberry/superviseur-robot/nbproject/project.xml diff --git a/software/raspberry/superviseur-robot/superviseur/.gitignore b/software/raspberry/superviseur-robot/superviseur/.gitignore deleted file mode 100644 index 5ceb27c..0000000 --- a/software/raspberry/superviseur-robot/superviseur/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -bin/ -build/ -CMakeFiles/ -dist/ - -.dep.inc -Makefile -*.cmake -*.o - diff --git a/software/raspberry/superviseur-robot/superviseur/CMakeLists.txt b/software/raspberry/superviseur-robot/superviseur/CMakeLists.txt deleted file mode 100644 index fd22eaa..0000000 --- a/software/raspberry/superviseur-robot/superviseur/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -set(superviseur_FILES ./src/main.cpp src/functions.cpp) - -include_directories(./src ../lib /usr/xenomai/include /usr/xenomai/include/mercury) -link_directories(/usr/xenomai/lib) - -add_executable(superviseur ${superviseur_FILES}) -target_link_libraries(superviseur destijl) - -#add_custom_command(TARGET superviseur POST_BUILD -# COMMAND sudo chown root ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur -# COMMAND sudo chgrp root ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur -# COMMAND sudo chmod +s ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur -# WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} -# COMMENT "Add sticky bit" -#) \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Debug.mk b/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Debug.mk deleted file mode 100644 index 490bfe1..0000000 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Debug.mk +++ /dev/null @@ -1,119 +0,0 @@ -# -# Generated Makefile - do not edit! -# -# Edit the Makefile in the project folder instead (../Makefile). Each target -# has a -pre and a -post target defined where you can add customized code. -# -# This makefile implements configuration specific macros and targets. - - -# Environment -MKDIR=mkdir -CP=cp -GREP=grep -NM=nm -CCADMIN=CCadmin -RANLIB=ranlib -CC=gcc -CCC=g++ -CXX=g++ -FC=gfortran -AS=as - -# Macros -CND_PLATFORM=GNU-Linux -CND_DLIB_EXT=so -CND_CONF=Debug -CND_DISTDIR=dist -CND_BUILDDIR=build - -# Include project Makefile -include Makefile - -# Object Directory -OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} - -# Object Files -OBJECTFILES= \ - ${OBJECTDIR}/_ext/a59f760b/image.o \ - ${OBJECTDIR}/_ext/a59f760b/message.o \ - ${OBJECTDIR}/_ext/a59f760b/monitor.o \ - ${OBJECTDIR}/_ext/a59f760b/robot.o \ - ${OBJECTDIR}/_ext/a59f760b/server.o \ - ${OBJECTDIR}/src/functions.o \ - ${OBJECTDIR}/src/main.o - - -# C Compiler Flags -CFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy - -# CC Compiler Flags -CCFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -CXXFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy - -# Fortran Compiler Flags -FFLAGS= - -# Assembler Flags -ASFLAGS= - -# Link Libraries and Options -LDLIBSOPTIONS=`pkg-config --libs opencv` - -# Build Targets -.build-conf: ${BUILD_SUBPROJECTS} - "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur - -${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur: ${OBJECTFILES} - ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} - ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur ${OBJECTFILES} ${LDLIBSOPTIONS} -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt - -${OBJECTDIR}/_ext/a59f760b/image.o: ../lib/src/image.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/image.o ../lib/src/image.cpp - -${OBJECTDIR}/_ext/a59f760b/message.o: ../lib/src/message.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/message.o ../lib/src/message.cpp - -${OBJECTDIR}/_ext/a59f760b/monitor.o: ../lib/src/monitor.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/monitor.o ../lib/src/monitor.cpp - -${OBJECTDIR}/_ext/a59f760b/robot.o: ../lib/src/robot.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/robot.o ../lib/src/robot.cpp - -${OBJECTDIR}/_ext/a59f760b/server.o: ../lib/src/server.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/server.o ../lib/src/server.cpp - -${OBJECTDIR}/src/functions.o: src/functions.cpp - ${MKDIR} -p ${OBJECTDIR}/src - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/functions.o src/functions.cpp - -${OBJECTDIR}/src/main.o: src/main.cpp - ${MKDIR} -p ${OBJECTDIR}/src - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/main.o src/main.cpp - -# Subprojects -.build-subprojects: - -# Clean Targets -.clean-conf: ${CLEAN_SUBPROJECTS} - ${RM} -r ${CND_BUILDDIR}/${CND_CONF} - -# Subprojects -.clean-subprojects: - -# Enable dependency checking -.dep.inc: .depcheck-impl - -include .dep.inc diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Debug__RPI_.mk b/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Debug__RPI_.mk deleted file mode 100644 index ff76d0c..0000000 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Debug__RPI_.mk +++ /dev/null @@ -1,119 +0,0 @@ -# -# Generated Makefile - do not edit! -# -# Edit the Makefile in the project folder instead (../Makefile). Each target -# has a -pre and a -post target defined where you can add customized code. -# -# This makefile implements configuration specific macros and targets. - - -# Environment -MKDIR=mkdir -CP=cp -GREP=grep -NM=nm -CCADMIN=CCadmin -RANLIB=ranlib -CC=gcc -CCC=g++ -CXX=g++ -FC=gfortran -AS=as - -# Macros -CND_PLATFORM=GNU-Linux -CND_DLIB_EXT=so -CND_CONF=Debug__RPI_ -CND_DISTDIR=dist -CND_BUILDDIR=build - -# Include project Makefile -include Makefile - -# Object Directory -OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} - -# Object Files -OBJECTFILES= \ - ${OBJECTDIR}/_ext/a59f760b/image.o \ - ${OBJECTDIR}/_ext/a59f760b/message.o \ - ${OBJECTDIR}/_ext/a59f760b/monitor.o \ - ${OBJECTDIR}/_ext/a59f760b/robot.o \ - ${OBJECTDIR}/_ext/a59f760b/server.o \ - ${OBJECTDIR}/src/functions.o \ - ${OBJECTDIR}/src/main.o - - -# C Compiler Flags -CFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy - -# CC Compiler Flags -CCFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -CXXFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy - -# Fortran Compiler Flags -FFLAGS= - -# Assembler Flags -ASFLAGS= - -# Link Libraries and Options -LDLIBSOPTIONS=`pkg-config --libs opencv` -lraspicam_cv -lraspicam - -# Build Targets -.build-conf: ${BUILD_SUBPROJECTS} - "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur - -${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur: ${OBJECTFILES} - ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} - ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur ${OBJECTFILES} ${LDLIBSOPTIONS} -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt - -${OBJECTDIR}/_ext/a59f760b/image.o: ../lib/src/image.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/image.o ../lib/src/image.cpp - -${OBJECTDIR}/_ext/a59f760b/message.o: ../lib/src/message.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/message.o ../lib/src/message.cpp - -${OBJECTDIR}/_ext/a59f760b/monitor.o: ../lib/src/monitor.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/monitor.o ../lib/src/monitor.cpp - -${OBJECTDIR}/_ext/a59f760b/robot.o: ../lib/src/robot.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/robot.o ../lib/src/robot.cpp - -${OBJECTDIR}/_ext/a59f760b/server.o: ../lib/src/server.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/server.o ../lib/src/server.cpp - -${OBJECTDIR}/src/functions.o: src/functions.cpp - ${MKDIR} -p ${OBJECTDIR}/src - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/functions.o src/functions.cpp - -${OBJECTDIR}/src/main.o: src/main.cpp - ${MKDIR} -p ${OBJECTDIR}/src - ${RM} "$@.d" - $(COMPILE.cc) -g -D_WITH_TRACE_ -Isrc -I../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/main.o src/main.cpp - -# Subprojects -.build-subprojects: - -# Clean Targets -.clean-conf: ${CLEAN_SUBPROJECTS} - ${RM} -r ${CND_BUILDDIR}/${CND_CONF} - -# Subprojects -.clean-subprojects: - -# Enable dependency checking -.dep.inc: .depcheck-impl - -include .dep.inc diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Release.mk b/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Release.mk deleted file mode 100644 index e888d88..0000000 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/Makefile-Release.mk +++ /dev/null @@ -1,119 +0,0 @@ -# -# Generated Makefile - do not edit! -# -# Edit the Makefile in the project folder instead (../Makefile). Each target -# has a -pre and a -post target defined where you can add customized code. -# -# This makefile implements configuration specific macros and targets. - - -# Environment -MKDIR=mkdir -CP=cp -GREP=grep -NM=nm -CCADMIN=CCadmin -RANLIB=ranlib -CC=gcc -CCC=g++ -CXX=g++ -FC=gfortran -AS=as - -# Macros -CND_PLATFORM=GNU-Linux -CND_DLIB_EXT=so -CND_CONF=Release -CND_DISTDIR=dist -CND_BUILDDIR=build - -# Include project Makefile -include Makefile - -# Object Directory -OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} - -# Object Files -OBJECTFILES= \ - ${OBJECTDIR}/_ext/a59f760b/image.o \ - ${OBJECTDIR}/_ext/a59f760b/message.o \ - ${OBJECTDIR}/_ext/a59f760b/monitor.o \ - ${OBJECTDIR}/_ext/a59f760b/robot.o \ - ${OBJECTDIR}/_ext/a59f760b/server.o \ - ${OBJECTDIR}/src/functions.o \ - ${OBJECTDIR}/src/main.o - - -# C Compiler Flags -CFLAGS= - -# CC Compiler Flags -CCFLAGS= -CXXFLAGS= - -# Fortran Compiler Flags -FFLAGS= - -# Assembler Flags -ASFLAGS= - -# Link Libraries and Options -LDLIBSOPTIONS= - -# Build Targets -.build-conf: ${BUILD_SUBPROJECTS} - "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur - -${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur: ${OBJECTFILES} - ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} - ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur ${OBJECTFILES} ${LDLIBSOPTIONS} - -${OBJECTDIR}/_ext/a59f760b/image.o: ../lib/src/image.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/image.o ../lib/src/image.cpp - -${OBJECTDIR}/_ext/a59f760b/message.o: ../lib/src/message.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/message.o ../lib/src/message.cpp - -${OBJECTDIR}/_ext/a59f760b/monitor.o: ../lib/src/monitor.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/monitor.o ../lib/src/monitor.cpp - -${OBJECTDIR}/_ext/a59f760b/robot.o: ../lib/src/robot.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/robot.o ../lib/src/robot.cpp - -${OBJECTDIR}/_ext/a59f760b/server.o: ../lib/src/server.cpp - ${MKDIR} -p ${OBJECTDIR}/_ext/a59f760b - ${RM} "$@.d" - $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a59f760b/server.o ../lib/src/server.cpp - -${OBJECTDIR}/src/functions.o: src/functions.cpp - ${MKDIR} -p ${OBJECTDIR}/src - ${RM} "$@.d" - $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/functions.o src/functions.cpp - -${OBJECTDIR}/src/main.o: src/main.cpp - ${MKDIR} -p ${OBJECTDIR}/src - ${RM} "$@.d" - $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/main.o src/main.cpp - -# Subprojects -.build-subprojects: - -# Clean Targets -.clean-conf: ${CLEAN_SUBPROJECTS} - ${RM} -r ${CND_BUILDDIR}/${CND_CONF} - -# Subprojects -.clean-subprojects: - -# Enable dependency checking -.dep.inc: .depcheck-impl - -include .dep.inc diff --git a/software/raspberry/superviseur-robot/superviseur/nbproject/configurations.xml b/software/raspberry/superviseur-robot/superviseur/nbproject/configurations.xml deleted file mode 100644 index e5c1aec..0000000 --- a/software/raspberry/superviseur-robot/superviseur/nbproject/configurations.xml +++ /dev/null @@ -1,230 +0,0 @@ - - - - - ../lib/definitions.h - ./src/functions.h - ../lib/image.h - ../lib/message.h - ../lib/monitor.h - ../lib/robot.h - ../lib/server.h - - - gdbsudo.sh - - - ./src/functions.cpp - ../lib/src/image.cpp - ./src/main.cpp - ../lib/src/message.cpp - ../lib/src/monitor.cpp - ../lib/src/robot.cpp - ../lib/src/server.cpp - - - - - Makefile - - - Makefile - - - - default - true - false - - - - - src - ../lib - - -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy - - - - src - ../lib - /usr/xenomai/include - /usr/xenomai/include/mercury - - -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy - - _WITH_TRACE_ - __FOR_PC__ - - - - - `pkg-config --libs opencv` - - -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - default - true - false - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GNU|GNU - true - false - - - - - src - ../lib - /usr/xenomai/include - /usr/xenomai/include/mercury - - -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy - - - - src - ../lib - /usr/xenomai/include - /usr/xenomai/include/mercury - - -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy - - _WITH_TRACE_ - - - - - `pkg-config --libs opencv` - raspicam_cv - raspicam - - -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/software/raspberry/superviseur-robot/superviseur/src/functions.cpp b/software/raspberry/superviseur-robot/tasks.cpp similarity index 99% rename from software/raspberry/superviseur-robot/superviseur/src/functions.cpp rename to software/raspberry/superviseur-robot/tasks.cpp index 89b6e89..da732f2 100644 --- a/software/raspberry/superviseur-robot/superviseur/src/functions.cpp +++ b/software/raspberry/superviseur-robot/tasks.cpp @@ -23,7 +23,7 @@ * \brief Miscellaneous functions used for destijl project. */ -#include "functions.h" +#include "tasks.h" char mode_start; diff --git a/software/raspberry/superviseur-robot/superviseur/src/functions.h b/software/raspberry/superviseur-robot/tasks.h similarity index 100% rename from software/raspberry/superviseur-robot/superviseur/src/functions.h rename to software/raspberry/superviseur-robot/tasks.h From 34d1cb6bd810d4dab8017c2d5826c3a2cd161f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20DI=20MERCURIO?= Date: Wed, 19 Dec 2018 09:15:42 +0100 Subject: [PATCH 02/10] passage au tout objet en cours --- .../superviseur-robot/lib/comgui.cpp | 189 ------- .../superviseur-robot/lib/commonitor.cpp | 336 +++++++++++++ .../lib/{comgui.h => commonitor.h} | 52 +- .../superviseur-robot/lib/comrobot.cpp | 334 +++++++++++++ .../superviseur-robot/lib/comrobot.h | 143 ++++++ .../raspberry/superviseur-robot/lib/img.cpp | 17 +- .../raspberry/superviseur-robot/lib/img.h | 19 +- .../superviseur-robot/lib/messages.cpp | 469 ++++++++++++++++-- .../superviseur-robot/lib/messages.h | 142 ++---- .../nbproject/Makefile-Debug.mk | 20 +- .../nbproject/Makefile-Debug__Pthread_.mk | 131 +++++ .../nbproject/Makefile-Debug__RPI_.mk | 20 +- .../nbproject/Makefile-Release.mk | 20 +- .../nbproject/Makefile-impl.mk | 2 +- .../nbproject/Makefile-variables.mk | 8 + .../nbproject/Package-Debug__Pthread_.bash | 76 +++ .../nbproject/configurations.xml | 179 +++++++ .../nbproject/private/Makefile-variables.mk | 1 + .../nbproject/private/configurations.xml | 37 ++ .../nbproject/private/private.xml | 8 +- .../superviseur-robot/nbproject/project.xml | 8 +- software/raspberry/superviseur-robot/tasks.h | 4 +- .../superviseur-robot/tasks_pthread.cpp | 263 ++++++++++ .../superviseur-robot/tasks_pthread.h | 104 ++++ 24 files changed, 2212 insertions(+), 370 deletions(-) delete mode 100644 software/raspberry/superviseur-robot/lib/comgui.cpp create mode 100644 software/raspberry/superviseur-robot/lib/commonitor.cpp rename software/raspberry/superviseur-robot/lib/{comgui.h => commonitor.h} (64%) create mode 100644 software/raspberry/superviseur-robot/lib/comrobot.cpp create mode 100644 software/raspberry/superviseur-robot/lib/comrobot.h create mode 100644 software/raspberry/superviseur-robot/nbproject/Makefile-Debug__Pthread_.mk create mode 100644 software/raspberry/superviseur-robot/nbproject/Package-Debug__Pthread_.bash create mode 100644 software/raspberry/superviseur-robot/tasks_pthread.cpp create mode 100644 software/raspberry/superviseur-robot/tasks_pthread.h diff --git a/software/raspberry/superviseur-robot/lib/comgui.cpp b/software/raspberry/superviseur-robot/lib/comgui.cpp deleted file mode 100644 index 0ad3141..0000000 --- a/software/raspberry/superviseur-robot/lib/comgui.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (C) 2018 dimercur - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "comgui.h" -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -/* - * Constants used for sending commands to gui - */ -const string LABEL_GUI_ANGULAR_POSITION = "AngularPosition"; -const string LABEL_GUI_ANGULAR_SPEED = "AngularSpeed"; -const string LABEL_GUI_BATTERY_LEVEL = "Battery"; -const string LABEL_GUI_LINEAR_SPEED = "LinearSpeed"; -const string LABEL_GUI_USER_PRESENCE = "User"; -const string LABEL_GUI_BETA_ANGLE = "Beta"; -const string LABEL_GUI_TORQUE = "Torque"; -const string LABEL_GUI_EMERGENCY_STOP = "Emergency"; -const string LABEL_GUI_LOG = "Log"; - -/** - * Create a server and open a socket over TCP - * - * @param port Port used for communication - * @return Socket number - * @throw std::runtime_error if it fails - */ -int ComGui::Open(int port) { - struct sockaddr_in server; - - socketFD = socket(AF_INET, SOCK_STREAM, 0); - if (socketFD < 0) { - throw std::runtime_error{"ComGui::Open : Can not create socket"}; - } - - server.sin_addr.s_addr = INADDR_ANY; - server.sin_family = AF_INET; - server.sin_port = htons(port); - - if (bind(socketFD, (struct sockaddr *) &server, sizeof (server)) < 0) { - throw std::runtime_error{"ComGui::Open : Can not bind socket on port " + std::to_string(port)}; - } - - listen(socketFD, 1); - - return socketFD; -} - -/** - * Close socket and server - */ -void ComGui::Close() { - close(socketFD); - - socketFD = -1; -} - -/** - * Wait for a client to connect - * @return Client number - * @throw std::runtime_error if it fails - */ -int ComGui::AcceptClient() { - struct sockaddr_in client; - int c = sizeof (struct sockaddr_in); - - clientID = accept(socketFD, (struct sockaddr *) &client, (socklen_t*) & c); - - if (clientID < 0) - throw std::runtime_error { - "ComGui::AcceptClient : Accept failed" - }; - - return clientID; -} - -/** - * Send a message to GUI - * - * @param msg Message to send to GUI - * @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that. - * @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously - */ -void ComGui::Write(Message* msg) { - string *str; - - // Call user method before Write - Write_Pre(); - - /* Convert message to string to send to GUI */ - str = MessageToString(msg); - - //cout << "Message sent to GUI: " << str->c_str() << endl; - write(clientID, str->c_str(), str->length()); - - delete(str); - - // Call user method after write - Write_Post(); -} - -/** - * Method used internally to convert a message content to a string that can be sent over TCP - * @param msg Message to be converted - * @return A string, image of the message - */ -string *ComGui::MessageToString(Message *msg) { - int id; - string *str; - - if (msg != NULL) { - id = msg->GetID(); - - switch (id) { - case MESSAGE_ANGLE_POSITION: - str = new string(LABEL_GUI_ANGULAR_POSITION + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); - replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . - break; - case MESSAGE_ANGULAR_SPEED: - str = new string(LABEL_GUI_ANGULAR_SPEED + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); - replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . - break; - case MESSAGE_BATTERY: - str = new string(LABEL_GUI_BATTERY_LEVEL + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); - replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . - break; - case MESSAGE_BETA: - str = new string(LABEL_GUI_BETA_ANGLE + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); - replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . - break; - case MESSAGE_LINEAR_SPEED: - str = new string(LABEL_GUI_LINEAR_SPEED + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); - replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . - break; - case MESSAGE_TORQUE: - str = new string(LABEL_GUI_TORQUE + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); - replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . - break; - case MESSAGE_EMERGENCY_STOP: - str = new string(LABEL_GUI_EMERGENCY_STOP + "="); - if (((MessageBool*) msg)->GetState()) - str->append("True\n"); - else - str->append("False\n"); - break; - case MESSAGE_USER_PRESENCE: - str = new string(LABEL_GUI_USER_PRESENCE + "="); - if (((MessageBool*) msg)->GetState()) - str->append("True\n"); - else - str->append("False\n"); - break; - case MESSAGE_EMPTY: - str = new string(""); //empty string - break; - case MESSAGE_LOG: - str = new string(LABEL_GUI_LOG + "=" + ((MessageString*) msg)->GetString() + "\n"); - break; - default: - str = new string(""); //empty string - break; - } - } - - return str; -} diff --git a/software/raspberry/superviseur-robot/lib/commonitor.cpp b/software/raspberry/superviseur-robot/lib/commonitor.cpp new file mode 100644 index 0000000..9bb0d96 --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/commonitor.cpp @@ -0,0 +1,336 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "commonitor.h" +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +/* + * @brief Constants used for sending commands to monitor + */ +const string LABEL_MONITOR_ANSWER_ACK = "AACK"; +const string LABEL_MONITOR_ANSWER_NACK = "ANAK"; +const string LABEL_MONITOR_ANSWER_LOST_DMB= "ATIM"; +const string LABEL_MONITOR_ANSWER_TIMEOUT= "ATIM"; +const string LABEL_MONITOR_ANSWER_CMD_REJECTED= "ACRJ"; +const string LABEL_MONITOR_MESSAGE = "MSSG"; +const string LABEL_MONITOR_CAMERA_OPEN= "COPN"; +const string LABEL_MONITOR_CAMERA_CLOSE= "CCLS"; +const string LABEL_MONITOR_CAMERA_IMAGE = "CIMG"; +const string LABEL_MONITOR_CAMERA_ARENA_ASK = "CASA"; +const string LABEL_MONITOR_CAMERA_ARENA_INFIRME = "CAIN"; +const string LABEL_MONITOR_CAMERA_ARENA_CONFIRM = "CACO"; +const string LABEL_MONITOR_CAMERA_POSITION_COMPUTE= "CPCO"; +const string LABEL_MONITOR_CAMERA_POSITION_STOP= "CPST"; +const string LABEL_MONITOR_CAMERA_POSITION = "CPOS"; +const string LABEL_MONITOR_ROBOT_COM_OPEN = "ROPN"; +const string LABEL_MONITOR_ROBOT_COM_CLOSE = "RCLS"; +const string LABEL_MONITOR_ROBOT_PING = "RPIN"; +const string LABEL_MONITOR_ROBOT_RESET = "RRST"; +const string LABEL_MONITOR_ROBOT_START_WITHOUT_WD= "RSOW"; +const string LABEL_MONITOR_ROBOT_START_WITH_WD= "RSWW"; +const string LABEL_MONITOR_ROBOT_RELOAD_WD = "RLDW"; +const string LABEL_MONITOR_ROBOT_MOVE = "RMOV"; +const string LABEL_MONITOR_ROBOT_TURN = "RTRN"; +const string LABEL_MONITOR_ROBOT_GO_FORWARD = "RGFW"; +const string LABEL_MONITOR_ROBOT_GO_BACKWARD = "RGBW"; +const string LABEL_MONITOR_ROBOT_GO_LEFT = "RGLF"; +const string LABEL_MONITOR_ROBOT_GO_RIGHT = "RGRI"; +const string LABEL_MONITOR_ROBOT_STOP = "RSTP"; +const string LABEL_MONITOR_ROBOT_POWEROFF = "RPOF"; +const string LABEL_MONITOR_ROBOT_BATTERY_LEVEL = "RBLV"; +const string LABEL_MONITOR_ROBOT_GET_BATTERY = "RGBT"; +const string LABEL_MONITOR_ROBOT_GET_STATE = "RGST"; +const string LABEL_MONITOR_ROBOT_CURRENT_STATE = "RCST"; + +const string LABEL_SEPARATOR_CHAR = ":"; + +/** + * Create a server and open a socket over TCP + * + * @param port Port used for communication + * @return Socket number + * @throw std::runtime_error if it fails + */ +int ComMonitor::Open(int port) { + struct sockaddr_in server; + + socketFD = socket(AF_INET, SOCK_STREAM, 0); + if (socketFD < 0) { + throw std::runtime_error{"ComMonitor::Open : Can not create socket"}; + } + + server.sin_addr.s_addr = INADDR_ANY; + server.sin_family = AF_INET; + server.sin_port = htons(port); + + if (bind(socketFD, (struct sockaddr *) &server, sizeof (server)) < 0) { + throw std::runtime_error{"ComMonitor::Open : Can not bind socket on port " + std::to_string(port)}; + } + + listen(socketFD, 1); + + return socketFD; +} + +/** + * Close socket and server + */ +void ComMonitor::Close() { + close(socketFD); + + socketFD = -1; +} + +/** + * Wait for a client to connect + * @return Client number + * @throw std::runtime_error if it fails + */ +int ComMonitor::AcceptClient() { + struct sockaddr_in client; + int c = sizeof (struct sockaddr_in); + + clientID = accept(socketFD, (struct sockaddr *) &client, (socklen_t*) & c); + + if (clientID < 0) + throw std::runtime_error { + "ComMonitor::AcceptClient : Accept failed" + }; + + return clientID; +} + +/** + * Send a message to monitor + * + * @param msg Message to send to monitor + * @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that. + * @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously + */ +void ComMonitor::Write(Message &msg) { + string str; + + // Call user method before Write + Write_Pre(); + + /* Convert message to string to send to monitor */ + str = MessageToString(msg); + + //cout << "Message sent to monitor: " << str->c_str() << endl; + write(clientID, str.c_str(), str.length()); + + delete(&msg); + + // Call user method after write + Write_Post(); +} + +/** + * Receive a message from monitor + * + * @return Message received from monitor + * @attention Message provided is produced by the method. You must delete it when you are done using it + * @warning Read is not thread safe : check that multiple tasks can't access this method simultaneously + */ +Message *ComMonitor::Read() { + char length = 0; + string s; + char data; + bool endReception=false; + Message *msg; + + // Call user method before read + Read_Pre(); + + if (clientID > 0) { + while (!endReception) { + if ((length = recv(clientID, (void*) &data, 1, MSG_WAITALL)) > 0) { + if (data != '\n') { + s+=data; + } else endReception = true; + } + } + + if (length<=0) msg = new Message(MESSAGE_MONITOR_LOST); + else { + msg=StringToMessage(s); + } + } + + // Call user method after read + Read_Post(); + + return msg; +} + +/** + * Method used internally to convert a message content to a string that can be sent over TCP + * @param msg Message to be converted + * @return A string, image of the message + */ +string ComMonitor::MessageToString(Message &msg) { + int id; + string str; + Message *localMsg = &msg; + Position pos; + + id = msg.GetID(); + + switch (id) { + case MESSAGE_ANSWER: + switch (((MessageAnswer*)localMsg)->GetAnswer()) { + case ANSWER_ACK: + str.append(LABEL_MONITOR_ANSWER_ACK); + break; + case ANSWER_NACK: + str.append(LABEL_MONITOR_ANSWER_NACK); + break; + case ANSWER_LOST_ROBOT: + str.append(LABEL_MONITOR_ANSWER_LOST_DMB); + break; + case ANSWER_ROBOT_TIMEOUT: + str.append(LABEL_MONITOR_ANSWER_TIMEOUT); + break; + case ANSWER_ROBOT_UNKNOWN_COMMAND: + str.append(LABEL_MONITOR_ANSWER_CMD_REJECTED); + break; + case ANSWER_ROBOT_ERROR: + str.append(LABEL_MONITOR_ANSWER_CMD_REJECTED); + break; + default: + str.append(LABEL_MONITOR_ANSWER_NACK); + }; + + break; + case MESSAGE_POSITION: + pos = ((MessagePosition*)&msg)->GetPosition(); + + str.append(LABEL_MONITOR_CAMERA_POSITION + LABEL_SEPARATOR_CHAR + to_string(pos.robotId) + ";" + + to_string(pos.angle) + ";" + to_string(pos.center.x) + ";" + to_string(pos.center.y) + ";" + + to_string(pos.direction.x) + ";" + to_string(pos.direction.y)); + break; + case MESSAGE_IMAGE: + str.append(LABEL_MONITOR_CAMERA_IMAGE + LABEL_SEPARATOR_CHAR + ((MessageImg*) &msg)->GetImage()->ToBase64()); + break; + case MESSAGE_ROBOT_BATTERY_LEVEL: + str.append(LABEL_MONITOR_ROBOT_BATTERY_LEVEL + LABEL_SEPARATOR_CHAR + to_string(((MessageBattery*) &msg)->GetLevel())); + break; + case MESSAGE_ROBOT_CURRENT_STATE: + str.append(LABEL_MONITOR_ROBOT_CURRENT_STATE + LABEL_SEPARATOR_CHAR + to_string(((MessageState*) &msg)->GetState())); + break; + case MESSAGE_LOG: + str.append(LABEL_MONITOR_MESSAGE + LABEL_SEPARATOR_CHAR + ((MessageString*) &msg)->GetString()); + break; + case MESSAGE_EMPTY: + str.append(""); //empty string + break; + default: + throw std::runtime_error + { + "ComMonitor::MessageToString (from ComMonitor::Write): Invalid message to send (" + msg.ToString() + }; + } + + str.append("\n"); + + return str; +} + +/** + * Method used internally to convert a string received over TCP to a message + * @param s String containing message + * @return A message, image of the string + */ +Message *ComMonitor::StringToMessage(string &s) { + Message *msg; + size_t pos; + string org =s; + string tokenCmd; + string tokenData; + + /* Separate command from data if string contains a ':' */ + if ((pos=org.find(LABEL_SEPARATOR_CHAR)) != string::npos) { + tokenCmd = org.substr(0,pos); + org.erase(0,pos+1); + tokenData=org; + } else tokenCmd=org; + + /* Convert command to message */ + if (tokenCmd.find(LABEL_MONITOR_ROBOT_MOVE)!= string::npos) { + msg = new MessageInt(MESSAGE_ROBOT_MOVE,stoi(tokenData)); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_TURN)!= string::npos) { + msg = new MessageInt(MESSAGE_ROBOT_TURN,stoi(tokenData)); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_START_WITHOUT_WD)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_START_WITHOUT_WD); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_START_WITH_WD)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_START_WITH_WD); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_RELOAD_WD)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_RELOAD_WD); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_PING)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_PING); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_RESET)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_RESET); + } else if (tokenCmd.find(LABEL_MONITOR_CAMERA_ARENA_ASK)!= string::npos) { + msg = new Message(MESSAGE_ASK_ARENA); + } else if (tokenCmd.find(LABEL_MONITOR_CAMERA_ARENA_CONFIRM)!= string::npos) { + msg = new Message(MESSAGE_ARENA_CONFIRM); + } else if (tokenCmd.find(LABEL_MONITOR_CAMERA_ARENA_INFIRME)!= string::npos) { + msg = new Message(MESSAGE_ARENA_INFIRM); + } else if (tokenCmd.find(LABEL_MONITOR_CAMERA_CLOSE)!= string::npos) { + msg = new Message(MESSAGE_CAM_CLOSE); + } else if (tokenCmd.find(LABEL_MONITOR_CAMERA_OPEN)!= string::npos) { + msg = new Message(MESSAGE_CAM_OPEN); + } else if (tokenCmd.find(LABEL_MONITOR_CAMERA_POSITION_COMPUTE)!= string::npos) { + msg = new Message(MESSAGE_COMPUTE_POSITION); + } else if (tokenCmd.find(LABEL_MONITOR_CAMERA_POSITION_STOP)!= string::npos) { + msg = new Message(MESSAGE_STOP_COMPUTE_POSITION); + } else if (tokenCmd.find(LABEL_MONITOR_MESSAGE)!= string::npos) { + msg = new MessageString(MESSAGE_LOG,tokenData); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_COM_CLOSE)!= string::npos) { + msg = new Message(MESSAGE_CLOSE_COM); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_COM_OPEN)!= string::npos) { + msg = new Message(MESSAGE_OPEN_COM); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_GET_BATTERY)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_GET_BATTERY); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_GET_STATE)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_GET_STATE); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_GO_FORWARD)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_GO_FORWARD); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_GO_BACKWARD)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_GO_BACK); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_GO_LEFT)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_GO_LEFT); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_GO_RIGHT)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_GO_RIGHT); + } else if (tokenCmd.find(LABEL_MONITOR_ROBOT_POWEROFF)!= string::npos) { + msg = new Message(MESSAGE_ROBOT_POWEROFF); + } else { + msg = new Message(MESSAGE_EMPTY); + } + + return msg; +} diff --git a/software/raspberry/superviseur-robot/lib/comgui.h b/software/raspberry/superviseur-robot/lib/commonitor.h similarity index 64% rename from software/raspberry/superviseur-robot/lib/comgui.h rename to software/raspberry/superviseur-robot/lib/commonitor.h index 351a0d7..9af1a5d 100644 --- a/software/raspberry/superviseur-robot/lib/comgui.h +++ b/software/raspberry/superviseur-robot/lib/commonitor.h @@ -15,8 +15,8 @@ * along with this program. If not, see . */ -#ifndef __COMGUI_H__ -#define __COMGUI_H__ +#ifndef __COMMONITOR_H__ +#define __COMMONITOR_H__ #include "messages.h" #include @@ -24,22 +24,22 @@ using namespace std; /** - * Class used for generating a server and communicating through it with GUI + * Class used for generating a server and communicating through it with monitor * - * @brief Communication class with GUI (server) + * @brief Communication class with monitor (server) * */ -class ComGui { +class ComMonitor { public: /** * Constructor */ - ComGui() {} + ComMonitor() {} /** * Destructor */ - virtual ~ComGui() {} + virtual ~ComMonitor() {} /** * Create a server and open a socket over TCP @@ -63,13 +63,13 @@ public: int AcceptClient(); /** - * Send a message to GUI + * Send a message to monitor * - * @param msg Message to send to GUI + * @param msg Message to send to monitor * @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that. * @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously */ - void Write(Message* msg); + void Write(Message &msg); /** * Function called at beginning of Write method @@ -82,6 +82,27 @@ public: * Use it to do some synchronization (release of mutex, for example) */ virtual void Write_Post() {} + + /** + * Receive a message from monitor + * + * @return Message received from monitor + * @attention Message provided is produced by the method. You must delete it when you are done using it + * @warning Read is not thread safe : check that multiple tasks can't access this method simultaneously + */ + Message *Read(); + + /** + * Function called at beginning of Read method + * Use it to do some synchronization (call of mutex, for example) + */ + virtual void Read_Pre() {} + + /** + * Function called at end of Read method + * Use it to do some synchronization (release of mutex, for example) + */ + virtual void Read_Post() {} protected: /** * Socket descriptor @@ -98,7 +119,14 @@ protected: * @param msg Message to be converted * @return A string, image of the message */ - string *MessageToString(Message *msg); + string MessageToString(Message &msg); + + /** + * Method used internally to convert a string received over TCP to a message + * @param s String containing message + * @return A message, image of the string + */ + Message *StringToMessage(string &s); }; -#endif /* __COMGUI_H__ */ +#endif /* __COMMONITOR_H__ */ diff --git a/software/raspberry/superviseur-robot/lib/comrobot.cpp b/software/raspberry/superviseur-robot/lib/comrobot.cpp new file mode 100644 index 0000000..347a248 --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/comrobot.cpp @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "comrobot.h" + +#include +#include +#include +#include +#include + +#include +#include + +#ifdef __FOR_PC__ +#define USART_FILENAME "/dev/ttyUSB0" +#else +#define USART_FILENAME "/dev/ttyS0" +#endif /* __FOR_PC__ */ + +/* + * Constants to be used for communicating with robot. Contains command tag + */ +typedef enum { + LABEL_ANGLE_POSITION = 'p', + LABEL_ANGULAR_SPEED = 's', + LABEL_BATTERY_LEVEL = 'b', + LABEL_BETA_ANGLE = 'v', + LABEL_USER_PRESENCE = 'u', + + LABEL_TORQUE = 'c', + LABEL_EMERGENCY_STOP = 'a' +} LabelRobot; + +/** + * Open serial link with robot + * @return File descriptor + * @throw std::runtime_error if it fails + */ +int ComRobot::Open() { + fd = open(USART_FILENAME, O_RDWR | O_NOCTTY /*| O_NDELAY*/); //Open in blocking read/write mode + if (fd == -1) { + //ERROR - CAN'T OPEN SERIAL PORT + throw std::runtime_error{"Error - Unable to open UART " + string(USART_FILENAME) + ". Ensure it is not in use by another application"}; + exit(EXIT_FAILURE); + } + + //Configuration of the serial port 115 520 Bauds + struct termios options; + tcgetattr(fd, &options); + options.c_cflag = B115200 | CS8 | CLOCAL | CREAD; //fd, (void*) &receivedChar, 1); //Filestream, buffer to store in, number of bytes to read (max) + //printf ("W=%02X ", receivedChar); + + if (rxLength <= -1) { + this->lostCom = true; + printf("Warning: communication lost in ComStm32::Read\n"); + msg = new Message(); + + return msg; + } else if (rxLength == 0) { + // nothing to do + } else if (receivedChar == '<') { // start of frame received + i = 0; + + do { + rxLength = read(this->fd, (void*) &rxBuffer[i], 6 - i); //Filestream, buffer to store in, number of bytes to read (max) + + if (rxLength >= 0) + i = i + rxLength; + else { + printf("Error while reading (%i)", rxLength); + + return NULL; + } + } while (i < 6); + + if (rxBuffer[5] == '\n') { + messageComplete = true; + } + } + } + + /* Treatment of received message */ + msg = CharToMessage(rxBuffer); + + /* Call Post method for read */ + Read_Post(); + + return msg; +} + +/** + * Convert an array of char to its message representation (when receiving data from stm32) + * @param bytes Array of char + * @return Message corresponding to received array of char + */ +Message* ComRobot::CharToMessage(unsigned char *bytes) { + Message *msg = __null; + MessageFloat *msgf; + MessageBool *msgb; + + switch (bytes[0]) { + case LABEL_ANGLE_POSITION: + msgf = new MessageFloat(); + msgf->SetID(MESSAGE_ANGLE_POSITION); + msgf->SetValue(CharToFloat(&bytes[1])); + msg = (Message*) msgf; + + break; + case LABEL_ANGULAR_SPEED: + msgf = new MessageFloat(); + msgf->SetID(MESSAGE_ANGULAR_SPEED); + msgf->SetValue(CharToFloat(&bytes[1])); + msg = (Message*) msgf; + + break; + case LABEL_BATTERY_LEVEL: + msgf = new MessageFloat(); + msgf->SetID(MESSAGE_BATTERY); + msgf->SetValue(CharToFloat(&bytes[1])); + msg = (Message*) msgf; + + break; + case LABEL_BETA_ANGLE: + msgf = new MessageFloat(); + msgf->SetID(MESSAGE_BETA); + msgf->SetValue(CharToFloat(&bytes[1])); + msg = (Message*) msgf; + + break; + case LABEL_USER_PRESENCE: + msgb = new MessageBool(); + msgb->SetID(MESSAGE_USER_PRESENCE); + msgb->SetState(CharToBool(&bytes[1])); + msg = (Message*) msgb; + + break; + default: + printf("Unknown message received from robot (%i)\n", bytes[0]); + fflush(stdout); + msg = new Message(); + } + + if (msg == NULL) { + printf("Message is null (%02X)\n", bytes[0]); + fflush(stdout); + msg = new Message(); + } + + return msg; +} + +/** + * Convert an array of char to float + * @param bytes Array of char, containing a binary image of a float + * @return Float value + */ +float ComRobot::CharToFloat(unsigned char *bytes) { + unsigned long value; + + union { + unsigned char buffer[4]; + float f; + } convert; + + convert.buffer[0] = bytes[0]; + convert.buffer[1] = bytes[1]; + convert.buffer[2] = bytes[2]; + convert.buffer[3] = bytes[3]; + + //value = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0]); + + return convert.f; +} + +/** + * Convert an array of char to integer + * @param bytes Array of char, containing a binary image of an integer + * @return Integer value + */ +unsigned int ComRobot::CharToInt(unsigned char *bytes) { + unsigned long value; + + value = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0]); + + return (unsigned int) value; +} + +/** + * Convert an array of char to boolean + * @param bytes Array of char, containing a binary image of a boolean + * @return Boolean value + */ +bool ComRobot::CharToBool(unsigned char *bytes) { + unsigned long value; + + value = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0]); + + if (value == 0) return false; + + else return true; +} + +/** + * Send a message to robot + * @param msg Message to send to robot + * @return 1 if success, 0 otherwise + * @attention Message is destroyed (delete) after being sent. You do not need to delete it yourself + * @attention Write is blocking until message is written into buffer (linux side) + * @warning Write is not thread save : check that multiple tasks can't access this method simultaneously + */ +int ComRobot::Write(Message* msg) { + unsigned char buffer[7]; + int ret_val = 0; + + MessageToChar(msg, buffer); + + Write_Pre(); + + if (this->fd != -1) { + int count = write(this->fd, &buffer[0], 7); //Filestream, bytes to write, number of bytes to write + if (count < 0) { + printf("Warning: UART TX error in ComStm32::Write\n"); + } else { + ret_val = 1; + } + } + + // deallocation of msg + delete(msg); + + Write_Post(); + + return ret_val; +} + +/** + * Convert a message to its array of char representation (for sending command to stm32) + * @param msg Message to be sent to robot + * @param buffer Array of char, image of message to send + */ +void ComRobot::MessageToChar(Message *msg, unsigned char *buffer) { + float val_f; + int val_i; + unsigned char *b; + + buffer[0] = '<'; + buffer[6] = '\n'; + + switch (msg->GetID()) { + case MESSAGE_TORQUE: + buffer[1] = LABEL_TORQUE; + val_f = ((MessageFloat*) msg)->GetValue(); + b = (unsigned char *) &val_f; + + break; + case MESSAGE_EMERGENCY_STOP: + buffer[1] = LABEL_EMERGENCY_STOP; + if (((MessageBool*) msg)->GetState()) + val_i = 1; + else + val_i = 0; + b = (unsigned char *) &val_i; + + break; + default: + printf("Invalid message to send"); + val_i = 0; + b = (unsigned char *) &val_i; + } + + buffer[2] = b[0]; + buffer[3] = b[1]; + buffer[4] = b[2]; + buffer[5] = b[3]; +} + diff --git a/software/raspberry/superviseur-robot/lib/comrobot.h b/software/raspberry/superviseur-robot/lib/comrobot.h new file mode 100644 index 0000000..96cae04 --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/comrobot.h @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __COMROBOT_H__ +#define __COMROBOT_H__ + +#include "messages.h" + +using namespace std; + +/** + * Class used for communicating with robot over serial + * + * @brief Communication class with robot + * + */ +class ComRobot { +public: + /** + * Constructor + */ + ComRobot() {} + + /** + * Destructor + */ + virtual ~ComRobot() {} + + /** + * Open serial link with robot + * @return File descriptor + * @throw std::runtime_error if it fails + */ + int Open(); + + /** + * Close serial link + * @return Success if above 0, failure if below 0 + */ + int Close(); + + /** + * Get a message from robot + * @return Message currently received + * @attention A message object is created (new) when receiving data from robot. You MUST remember to destroy is (delete) after use + * @attention Read method is blocking until a message is received + * @warning Read is not thread safe : Do not call it in multiple tasks simultaneously + */ + Message* Read(); + + /** + * Send a message to robot + * @param msg Message to send to robot + * @return 1 if success, 0 otherwise + * @attention Message is destroyed (delete) after being sent. You do not need to delete it yourself + * @attention Write is blocking until message is written into buffer (linux side) + * @warning Write is not thread save : check that multiple tasks can't access this method simultaneously + */ + int Write(Message* msg); + + /** + * Function called at beginning of Read method + * Use it to do some synchronization (call of mutex, for example) + */ + virtual void Read_Pre() {} + + /** + * Function called at end of Read method + * Use it to do some synchronization (call of mutex, for example) + */ + virtual void Read_Post() {} + + /** + * Function called at beginning of Write method + * Use it to do some synchronization (call of mutex, for example) + */ + virtual void Write_Pre() {} + + /** + * Function called at end of Write method + * Use it to do some synchronization (call of mutex, for example) + */ + virtual void Write_Post() {} + + static Message *Ping(); + +protected: + /** + * Serial link file descriptor + */ + int fd; + + /** + * Convert an array of char to float + * @param bytes Array of char, containing a binary image of a float + * @return Float value + */ + float CharToFloat(unsigned char *bytes); + + /** + * Convert an array of char to boolean + * @param bytes Array of char, containing a binary image of a boolean + * @return Boolean value + */ + bool CharToBool(unsigned char *bytes); + + /** + * Convert an array of char to integer + * @param bytes Array of char, containing a binary image of an integer + * @return Integer value + */ + unsigned int CharToInt(unsigned char *bytes); + + /** + * Convert an array of char to its message representation (when receiving data from stm32) + * @param bytes Array of char + * @return Message corresponding to received array of char + */ + Message* CharToMessage(unsigned char *bytes); + + /** + * Convert a message to its array of char representation (for sending command to stm32) + * @param msg Message to be sent to robot + * @param buffer Array of char, image of message to send + */ + void MessageToChar(Message *msg, unsigned char *buffer); +}; + +#endif /* __COMROBOT_H__ */ diff --git a/software/raspberry/superviseur-robot/lib/img.cpp b/software/raspberry/superviseur-robot/lib/img.cpp index 15d0bbf..4b7ae3a 100644 --- a/software/raspberry/superviseur-robot/lib/img.cpp +++ b/software/raspberry/superviseur-robot/lib/img.cpp @@ -18,7 +18,6 @@ #include "img.h" bool Arene::empty() { - if ((this->arene.height==0) || (this->arene.width==0)) return true; else return false; } @@ -27,6 +26,14 @@ Img::Img(ImageMat imgMatrice) { this->img = imgMatrice.clone(); } +string Img::ToString() { + return "Image size: "+this->img.cols+"x"this->img.rows+" (dim="+this->img.dims+")"; +} + +Img* Img::Copy() { + return new Img(this->img); +} + float Img::calculAngle(Position robot) { float a = robot.direction.x - robot.center.x; float b = robot.direction.y - robot.center.y ; @@ -93,6 +100,14 @@ Jpg Img::toJpg() { return imgJpg; } +string Img::ToBase64() { + string imgBase64; + Jpg imgJpg = toJpg(); + + /* faire la convertion Jpg vers base 64 */ + return imgBase64; +} + std::list Img::search_robot(Arene monArene) { std::list robotsFind; diff --git a/software/raspberry/superviseur-robot/lib/img.h b/software/raspberry/superviseur-robot/lib/img.h index 1ddde5a..4e98ea0 100644 --- a/software/raspberry/superviseur-robot/lib/img.h +++ b/software/raspberry/superviseur-robot/lib/img.h @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -33,16 +34,18 @@ #define ARENA_NOT_DETECTED -1 +using namespace std; + typedef cv::Mat ImageMat; -typedef std::vector Jpg; +typedef vector Jpg; -struct Position { +typedef struct { cv::Point2f center; cv::Point2f direction; float angle; int robotId; -}; +} Position; class Arene { public: @@ -55,7 +58,12 @@ public: class Img { public: Img(ImageMat imgMatrice); + + string ToString(); + Img* Copy(); + Jpg toJpg(); + string ToBase64(); Arene search_arena(); int draw_robot(Position robot); @@ -63,11 +71,12 @@ public: int draw_arena(Arene areneToDraw); std::list search_robot(Arene monArene); + #ifdef __WITH_ARUCO__ - std::list search_aruco(Arene monArene = NULL); + list search_aruco(Arene monArene = NULL); #endif // __WITH_ARUCO__ private: - cv::Mat img; + ImageMat img; #ifdef __WITH_ARUCO__ Ptr dictionary; diff --git a/software/raspberry/superviseur-robot/lib/messages.cpp b/software/raspberry/superviseur-robot/lib/messages.cpp index ede1297..8957c62 100644 --- a/software/raspberry/superviseur-robot/lib/messages.cpp +++ b/software/raspberry/superviseur-robot/lib/messages.cpp @@ -21,13 +21,14 @@ #include /* - * Constants used with ToString method, for printing message id + * @brief Constants used with ToString method, for printing message id */ const string MESSAGE_ID_STRING[] = { "Empty", "Log", "Answer", + "Monitor connection lost", "Open serial com", "Close serial com", "Open camera", @@ -37,7 +38,7 @@ const string MESSAGE_ID_STRING[] = { "Arena infirmed", "Compute position", "Stop compute position", - "Position, + "Position", "Image", "Robot ping", "Robot reset", @@ -56,7 +57,19 @@ const string MESSAGE_ID_STRING[] = { "Robot battery level", "Robot get state", "Robot current state" +}; +/* + * @brief Constants used with ToString method, for printing answer id + */ +const string ANSWER_ID_STRING[] = { + "Acknowledge", + "Not Acknowledge", + "Robot lost", + "Timeout error", + "Unknown command", + "Invalid or refused command", + "Checksum error" }; /** @@ -66,12 +79,29 @@ Message::Message() { this->messageID = MESSAGE_EMPTY; } +/** + * Create a new, empty message + */ +Message::Message(MessageID id) { + SetID(id); +} + /** * Destroy message */ Message::~Message() { } +/** + * Set message ID + * @param id Message ID + */ +void Message::SetID(MessageID id) { + if (CheckID(id)) { + this->messageID = id; + } else throw std::runtime_error {"Invalid message id for Message"}; +} + /** * Translate content of message into a string that can be displayed * @return A string describing message contents @@ -99,6 +129,7 @@ Message* Message::Copy() { */ bool Message::CheckID(MessageID id) { if ((id != MESSAGE_EMPTY) && + (id != MESSAGE_MONITOR_LOST) && (id != MESSAGE_ARENA_CONFIRM) && (id != MESSAGE_ARENA_INFIRM) && (id != MESSAGE_ASK_ARENA) && @@ -125,23 +156,23 @@ bool Message::CheckID(MessageID id) { } else return true; } -/* MessageFloat */ +/* MessageInt */ /** - * Create a new, empty float message + * Create a new, empty int message */ -MessageFloat::MessageFloat() { +MessageInt::MessageInt() { value = 0.0; } /** - * Create a new float message, with given ID and value + * Create a new int message, with given ID and value * @param id Message ID * @param val Message value - * @throw std::runtime_error if message ID is incompatible with float data + * @throw std::runtime_error if message ID is incompatible with int data */ -MessageFloat::MessageFloat(MessageID id, float val) { - MessageFloat::SetID(id); +MessageInt::MessageInt(MessageID id, int val) { + MessageInt::SetID(id); value = val; } @@ -151,12 +182,12 @@ MessageFloat::MessageFloat(MessageID id, float val) { * @param id Message ID * @throw std::runtime_error if message ID is incompatible with float data */ -void MessageFloat::SetID(MessageID id) { +void MessageInt::SetID(MessageID id) { if (CheckID(id)) messageID = id; else throw std::runtime_error { - "Invalid message id for MessageFloat" + "Invalid message id for MessageInt" }; } @@ -164,7 +195,7 @@ void MessageFloat::SetID(MessageID id) { * Translate content of message into a string that can be displayed * @return A string describing message contents */ -string MessageFloat::ToString() { +string MessageInt::ToString() { if (CheckID(this->messageID)) return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nValue: " + to_string(this->value); else @@ -172,11 +203,11 @@ string MessageFloat::ToString() { } /** - * Allocate a new mesage and copy contents of current message + * Allocate a new message and copy contents of current message * @return A message, copy of current */ -Message* MessageFloat::Copy() { - return new MessageFloat(this->messageID, this->value); +Message* MessageInt::Copy() { + return new MessageInt(this->messageID, this->value); } /** @@ -184,13 +215,9 @@ Message* MessageFloat::Copy() { * @param id Message ID * @return true, if message ID is acceptable, false otherwise */ -bool MessageFloat::CheckID(MessageID id) { - if ((id != MESSAGE_ANGLE_POSITION) && - (id != MESSAGE_ANGULAR_SPEED) && - (id != MESSAGE_BATTERY) && - (id != MESSAGE_BETA) && - (id != MESSAGE_LINEAR_SPEED) && - (id != MESSAGE_TORQUE)) { +bool MessageInt::CheckID(MessageID id) { + if ((id != MESSAGE_ROBOT_TURN) && + (id != MESSAGE_ROBOT_MOVE)) { return false; } else return true; } @@ -260,48 +287,62 @@ bool MessageString::CheckID(MessageID id) { } else return true; } -/* class MessageBool */ +/* class MessageImg */ /** - * Create a new, empty boolean message + * Create a new, empty image message */ -MessageBool::MessageBool() { - state = false; +MessageImg::MessageImg() { + image = NULL; } /** - * Create a new boolean message, with given ID and boolean value + * Create a new image message, with given ID and image * @param id Message ID - * @param state Boolean value - * @throw std::runtime_error if message ID is incompatible with boolean data + * @param image Image + * @throw std::runtime_error if message ID is incompatible with image */ -MessageBool::MessageBool(MessageID id, bool state) { - MessageBool::SetID(id); +MessageImg::MessageImg(MessageID id, Img* image) { + MessageImg::SetID(id); + MessageImg::SetImage(image); +} - this->state = state; +/** + * Destroy Image message + */ +MessageImg::~MessageImg() { + delete (this->image); } /** * Set message ID * @param id Message ID - * @throw std::runtime_error if message ID is incompatible with boolean data + * @throw std::runtime_error if message ID is incompatible with image */ -void MessageBool::SetID(MessageID id) { +void MessageImg::SetID(MessageID id) { if (CheckID(id)) messageID = id; else throw std::runtime_error { - "Invalid message id for MessageBool" + "Invalid message id for MessageImg" }; } +/** + * Set message image + * @param image Reference to image object + */ +void MessageImg::SetImage(Img* image) { + this->image = image->Copy(); +} + /** * Translate content of message into a string that can be displayed * @return A string describing message contents */ -string MessageBool::ToString() { +string MessageImg::ToString() { if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nState: \"" + to_string(this->state) + "\""; + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\n" + this->image->ToString(); else return "Invalid message"; } @@ -310,8 +351,9 @@ string MessageBool::ToString() { * Allocate a new message and copy contents of current message * @return A message, copy of current */ -Message* MessageBool::Copy() { - return new MessageBool(this->messageID, this->state); +Message* MessageImg::Copy() { + + return new MessageImg(this->messageID, this->image->Copy()); } /** @@ -319,9 +361,352 @@ Message* MessageBool::Copy() { * @param id Message ID * @return true, if message ID is acceptable, false otherwise */ -bool MessageBool::CheckID(MessageID id) { - if ((id != MESSAGE_EMERGENCY_STOP) && - (id != MESSAGE_USER_PRESENCE)) { +bool MessageImg::CheckID(MessageID id) { + if (id != MESSAGE_IMAGE) { return false; } else return true; } + +/* class MessageAnswer*/ + +/** + * Create a new, empty answer message + */ +MessageAnswer::MessageAnswer() { + answer=ANSWER_ACK; +} + +/** + * Create a new answer message, with given ID and answer + * @param id Message ID + * @param ans Answer ID + * @throw std::runtime_error if message ID is incompatible with string data + */ +MessageAnswer::MessageAnswer(MessageID id, AnswerID ans) { + MessageAnswer::SetID(id); + MessageAnswer::SetAnswer(ans); +} + +/** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with answer message + */ +void MessageAnswer::SetID(MessageID id) { + if (CheckID(id)) + messageID = id; + else + throw std::runtime_error { + "Invalid message id for MessageAnswer" + }; +} + +/** + * Set message answer + * @param ans Answer ID + * @throw std::runtime_error if answer ID is incompatible with answer data + */ +void MessageAnswer::SetAnswer(AnswerID ans) { + if ((ans != ANSWER_ACK) && + (ans != ANSWER_NACK) && + (ans != ANSWER_LOST_ROBOT) && + (ans != ANSWER_ROBOT_CHECKSUM) && + (ans != ANSWER_ROBOT_ERROR) && + (ans != ANSWER_ROBOT_TIMEOUT) && + (ans != ANSWER_ROBOT_UNKNOWN_COMMAND)) { + this->answer = answer; + } else { + throw std::runtime_error{ + "Invalid answer for MessageAnswer"}; + } +} + +/** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ +string MessageAnswer::ToString() { + if (CheckID(this->messageID)) + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nAnswer: \"" + ANSWER_ID_STRING[this->answer] + "\""; + else + return "Invalid message"; +} + +/** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ +Message* MessageAnswer::Copy() { + return new MessageAnswer(this->messageID, this->answer); +} + +/** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ +bool MessageAnswer::CheckID(MessageID id) { + if ((id != MESSAGE_ANSWER)) { + return false; + } else return true; +} + +/* class MessageBattery */ + +/** + * Create a new, empty battery message + */ +MessageBattery::MessageBattery() { + this->level = BATTERY_UNKNOWN; +} + +/** + * Create a new battery message, with given ID and battery level + * @param id Message ID + * @param level Battery level + * @throw std::runtime_error if message ID is incompatible with battery + */ +MessageBattery::MessageBattery(MessageID id, BatteryLevel level) { + MessageBattery::SetID(id); + MessageBattery::SetLevel(level); +} + +/** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with battery + */ +void MessageBattery::SetID(MessageID id) { + if (CheckID(id)) + messageID = id; + else + throw std::runtime_error { + "Invalid message id for MessageBattery" + }; +} + +/** + * Set battery level + * @param level Battery level + */ +void MessageBattery::SetLevel(BatteryLevel level) { + if ((level < BATTERY_UNKNOWN) || (level > BATTERY_FULL)) { + throw std::runtime_error{ + "Invalid battery level for MessageBattery"}; + } else { + this->level = level; + } +} + +/** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ +string MessageBattery::ToString() { + string levelString; + + switch (this->level) { + case BATTERY_UNKNOWN: + levelString="Unknown"; + break; + case BATTERY_EMPTY: + levelString="Empty"; + break; + case BATTERY_LOW: + levelString="Low"; + break; + case BATTERY_FULL: + levelString="Full"; + break; + default: + levelString="Invalid"; + } + + if (CheckID(this->messageID)) + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nBattery level: \"" + levelString + "\""; + else + return "Invalid message"; +} + +/** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ +Message* MessageBattery::Copy() { + return new MessageBattery(this->messageID, this->level); +} + +/** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ +bool MessageBattery::CheckID(MessageID id) { + if ((id != MESSAGE_ROBOT_BATTERY_LEVEL)) { + return false; + } else return true; +} + +/* class MessagePosition */ + +/** + * Create a new, empty string message + */ +MessagePosition::MessagePosition() { + this->pos.angle = 0.0; + this->pos.robotId = 0; + this->pos.center.x=0.0; + this->pos.center.y=0.0; + this->pos.direction.x=0.0; + this->pos.direction.y=0.0; +} + +/** + * Create a new string message, with given ID and string + * @param id Message ID + * @param s Message string + * @throw std::runtime_error if message ID is incompatible with string data + */ +MessagePosition::MessagePosition(MessageID id, Position& pos) { + MessagePosition::SetID(id); + MessagePosition::SetPosition(pos); +} + +/** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with string data + */ +void MessagePosition::SetID(MessageID id) { + if (CheckID(id)) + messageID = id; + else + throw std::runtime_error { + "Invalid message id for MessagePosition" + }; +} + +/** + * Set position + * @param pos Reference to position + */ +void MessagePosition::SetPosition(Position& pos) { + this->pos.angle = pos.angle; + this->pos.robotId = pos.robotId; + this->pos.center = pos.center; + this->pos.direction = pos.direction; +} + +/** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ +string MessagePosition::ToString() { + if (CheckID(this->messageID)) + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nPosition: \"" + to_string(this->pos.center.x) + ";" + to_string(this->pos.center.y) + "\""; + else + return "Invalid message"; +} + +/** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ +Message* MessagePosition::Copy() { + return new MessagePosition(this->messageID, this->pos); +} + +/** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ +bool MessagePosition::CheckID(MessageID id) { + if ((id != MESSAGE_POSITION)) { + return false; + } else return true; +} + + +/* class MessageState */ + +/** + * Create a new, empty state message + */ +MessageState::MessageState() { + state = ROBOT_NOT_BUSY; +} + +/** + * Create a new string message, with given ID and string + * @param id Message ID + * @param s Message string + * @throw std::runtime_error if message ID is incompatible with string data + */ +MessageState::MessageState(MessageID id, RobotState state) { + MessageState::SetID(id); + MessageState::SetState(state); +} + +/** + * Set message ID + * @param id Message ID + * @throw std::runtime_error if message ID is incompatible with robot state + */ +void MessageState::SetID(MessageID id) { + if (CheckID(id)) + messageID = id; + else + throw std::runtime_error { + "Invalid message id for MessageState" + }; +} + +/** + * Set robot state + * @param state Robot state + */ +void MessageState::SetState(RobotState state) { + if ((state != ROBOT_NOT_BUSY) && (state != ROBOT_BUSY)) { + throw std::runtime_error{ + "Invalid state for MessageState"}; + } else { + this->state = state; + } +} + +/** + * Translate content of message into a string that can be displayed + * @return A string describing message contents + */ +string MessageState::ToString() { + string stateString; + + if (this->state == ROBOT_NOT_BUSY) stateString="Not busy"; + else if (this->state == ROBOT_BUSY) stateString="Busy"; + else stateString="Invalid state"; + + if (CheckID(this->messageID)) + return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nState: \"" + stateString + "\""; + else + return "Invalid message"; +} + +/** + * Allocate a new message and copy contents of current message + * @return A message, copy of current + */ +Message* MessageState::Copy() { + return new MessageState(this->messageID, this->state); +} + +/** + * Verify if message ID is compatible with current message type + * @param id Message ID + * @return true, if message ID is acceptable, false otherwise + */ +bool MessageState::CheckID(MessageID id) { + if ((id != MESSAGE_ROBOT_CURRENT_STATE)) { + return false; + } else return true; +} \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/messages.h b/software/raspberry/superviseur-robot/lib/messages.h index 1d8b8a8..d545220 100644 --- a/software/raspberry/superviseur-robot/lib/messages.h +++ b/software/raspberry/superviseur-robot/lib/messages.h @@ -38,7 +38,10 @@ typedef enum { // messages for serial communication with robot MESSAGE_OPEN_COM, MESSAGE_CLOSE_COM, - + + // Messages specific to server + MESSAGE_MONITOR_LOST, + // Messages for camera MESSAGE_CAM_OPEN, MESSAGE_CAM_CLOSE, @@ -75,12 +78,13 @@ typedef enum { ANSWER_NACK, ANSWER_LOST_ROBOT, ANSWER_ROBOT_TIMEOUT, - ANSWER_ROBOT_UNKNWON_COMMAND, + ANSWER_ROBOT_UNKNOWN_COMMAND, ANSWER_ROBOT_ERROR, ANSWER_ROBOT_CHECKSUM } AnswerID; typedef enum { + BATTERY_UNKNOWN=-1, BATTERY_EMPTY=0, BATTERY_LOW, BATTERY_FULL @@ -106,6 +110,11 @@ public: */ Message(); + /** + * Create a new, empty message + */ + Message(MessageID id); + /** * Destroy message */ @@ -135,8 +144,7 @@ public: * Set message ID * @param id Message ID */ - virtual void SetID(MessageID id) { - } + virtual void SetID(MessageID id); /** * Comparison operator @@ -259,93 +267,6 @@ protected: bool CheckID(MessageID id); }; -/** - * Message class for holding float value, based on Message class - * - * @brief Float message class - * - */ -class MessageFloat : public Message { -public: - /** - * Create a new, empty float message - */ - MessageFloat(); - - /** - * Create a new float message, with given ID and value - * @param id Message ID - * @param val Message value - * @throw std::runtime_error if message ID is incompatible with float data - */ - MessageFloat(MessageID id, float val); - - /** - * Set message ID - * @param id Message ID - * @throw std::runtime_error if message ID is incompatible with float data - */ - void SetID(MessageID id); - - /** - * Get message value (float) - * @return Float value - */ - float GetValue() { - return value; - } - - /** - * Set message value (float) - * @param val Float value to store in message - */ - void SetValue(float val) { - this->value = val; - } - - /** - * Translate content of message into a string that can be displayed - * @return A string describing message contents - */ - string ToString(); - - /** - * Allocate a new mesage and copy contents of current message - * @return A message, copy of current - */ - Message* Copy(); - - /** - * Comparison operator - * @param msg Message to be compared - * @return true if message are equal, false otherwise - */ - virtual bool operator==(const MessageFloat& msg) { - return ((messageID == msg.messageID) && (value == msg.value)); - } - - /** - * Difference operator - * @param msg Message to be compared - * @return true if message are different, false otherwise - */ - virtual bool operator!=(const MessageFloat& msg) { - return !((messageID == msg.messageID) && (value == msg.value)); - } -protected: - /** - * Message float value - */ - float value; - - /** - * Verify if message ID is compatible with current message type - * @param id Message ID - * @return true, if message ID is acceptable, false otherwise - */ - bool CheckID(MessageID id); -}; - /** * Message class for holding string value, based on Message class * @@ -454,6 +375,11 @@ public: */ MessageImg(MessageID id, Img* image); + /** + * Destroy Image message + */ + virtual ~MessageImg(); + /** * Set message ID * @param id Message ID @@ -473,9 +399,7 @@ public: * Set message image * @param image Pointer to image object */ - void SetImage(Img* image) { - this->image = image; - } + void SetImage(Img* image); /** * Translate content of message into a string that can be displayed @@ -519,10 +443,10 @@ public: /** * Create a new image message, with given ID and boolean value * @param id Message ID - * @param image Pointer to image + * @param pos Position * @throw std::runtime_error if message ID is incompatible with image message */ - MessagePosition(MessageID id, Position pos); + MessagePosition(MessageID id, Position& pos); /** * Set message ID @@ -543,9 +467,7 @@ public: * Set message image * @param image Pointer to image object */ - void SetPosition(Position pos) { - this->pos = pos; - } + void SetPosition(Position& pos); /** * Translate content of message into a string that can be displayed @@ -613,9 +535,7 @@ public: * Set message image * @param image Pointer to image object */ - void SetLevel(BatteryLevel level) { - this->level = level; - } + void SetLevel(BatteryLevel level); /** * Translate content of message into a string that can be displayed @@ -659,10 +579,10 @@ public: /** * Create a new image message, with given ID and boolean value * @param id Message ID - * @param image Pointer to image + * @param ans Answer ID * @throw std::runtime_error if message ID is incompatible with image message */ - MessageAnswer(MessageID id, AnswerID answer); + MessageAnswer(MessageID id, AnswerID ans); /** * Set message ID @@ -680,12 +600,10 @@ public: } /** - * Set message image - * @param image Pointer to image object + * Set message answer + * @param ans Answer ID */ - void SetAnswer(AnswerID answer) { - this->answer = answer; - } + void SetAnswer(AnswerID ans); /** * Translate content of message into a string that can be displayed @@ -753,9 +671,7 @@ public: * Set message image * @param image Pointer to image object */ - void SetState(RobotState state) { - this->state = state; - } + void SetState(RobotState state); /** * Translate content of message into a string that can be displayed @@ -771,7 +687,7 @@ public: protected: /** - * Message answer + * Robot state */ RobotState state; diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-Debug.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug.mk index ce4f453..03affc7 100644 --- a/software/raspberry/superviseur-robot/nbproject/Makefile-Debug.mk +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug.mk @@ -41,7 +41,10 @@ OBJECTFILES= \ ${OBJECTDIR}/lib/robot.o \ ${OBJECTDIR}/lib/server.o \ ${OBJECTDIR}/main.o \ - ${OBJECTDIR}/tasks.o + ${OBJECTDIR}/tasks.o \ + ${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \ + ${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \ + ${OBJECTDIR}/tasks_pthread.o # C Compiler Flags @@ -103,6 +106,21 @@ ${OBJECTDIR}/tasks.o: tasks.cpp ${RM} "$@.d" $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp +${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + ${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + +${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + ${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + +${OBJECTDIR}/tasks_pthread.o: tasks_pthread.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks_pthread.o tasks_pthread.cpp + # Subprojects .build-subprojects: diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__Pthread_.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__Pthread_.mk new file mode 100644 index 0000000..2b12c40 --- /dev/null +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__Pthread_.mk @@ -0,0 +1,131 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Environment +MKDIR=mkdir +CP=cp +GREP=grep +NM=nm +CCADMIN=CCadmin +RANLIB=ranlib +CC=gcc +CCC=g++ +CXX=g++ +FC=gfortran +AS=as + +# Macros +CND_PLATFORM=GNU-Linux +CND_DLIB_EXT=so +CND_CONF=Debug__Pthread_ +CND_DISTDIR=dist +CND_BUILDDIR=build + +# Include project Makefile +include ./Makefile + +# Object Directory +OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM} + +# Object Files +OBJECTFILES= \ + ${OBJECTDIR}/lib/message.o \ + ${OBJECTDIR}/lib/messages.o \ + ${OBJECTDIR}/lib/monitor.o \ + ${OBJECTDIR}/lib/robot.o \ + ${OBJECTDIR}/lib/server.o \ + ${OBJECTDIR}/main.o \ + ${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \ + ${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \ + ${OBJECTDIR}/tasks_pthread.o + + +# C Compiler Flags +CFLAGS=-I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + +# CC Compiler Flags +CCFLAGS=-D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables +CXXFLAGS=-D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables + +# Fortran Compiler Flags +FFLAGS= + +# Assembler Flags +ASFLAGS= + +# Link Libraries and Options +LDLIBSOPTIONS=`pkg-config --libs opencv` + +# Build Targets +.build-conf: ${BUILD_SUBPROJECTS} + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot + +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot: ${OBJECTFILES} + ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot ${OBJECTFILES} ${LDLIBSOPTIONS} -lpthread -lrt + +${OBJECTDIR}/lib/message.o: lib/message.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/message.o lib/message.cpp + +${OBJECTDIR}/lib/messages.o: lib/messages.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/messages.o lib/messages.cpp + +${OBJECTDIR}/lib/monitor.o: lib/monitor.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/monitor.o lib/monitor.cpp + +${OBJECTDIR}/lib/robot.o: lib/robot.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/robot.o lib/robot.cpp + +${OBJECTDIR}/lib/server.o: lib/server.cpp + ${MKDIR} -p ${OBJECTDIR}/lib + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/lib/server.o lib/server.cpp + +${OBJECTDIR}/main.o: main.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp + +${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + ${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + +${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + ${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + +${OBJECTDIR}/tasks_pthread.o: tasks_pthread.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks_pthread.o tasks_pthread.cpp + +# Subprojects +.build-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${CND_BUILDDIR}/${CND_CONF} + +# Subprojects +.clean-subprojects: + +# Enable dependency checking +.dep.inc: .depcheck-impl + +include .dep.inc diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk index 702a517..c106fb3 100644 --- a/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk @@ -42,7 +42,10 @@ OBJECTFILES= \ ${OBJECTDIR}/lib/robot.o \ ${OBJECTDIR}/lib/server.o \ ${OBJECTDIR}/main.o \ - ${OBJECTDIR}/tasks.o + ${OBJECTDIR}/tasks.o \ + ${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \ + ${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \ + ${OBJECTDIR}/tasks_pthread.o # C Compiler Flags @@ -109,6 +112,21 @@ ${OBJECTDIR}/tasks.o: tasks.cpp ${RM} "$@.d" $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp +${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + ${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + +${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + ${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + +${OBJECTDIR}/tasks_pthread.o: tasks_pthread.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks_pthread.o tasks_pthread.cpp + # Subprojects .build-subprojects: diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-Release.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-Release.mk index fa26549..dd197c1 100644 --- a/software/raspberry/superviseur-robot/nbproject/Makefile-Release.mk +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-Release.mk @@ -42,7 +42,10 @@ OBJECTFILES= \ ${OBJECTDIR}/lib/robot.o \ ${OBJECTDIR}/lib/server.o \ ${OBJECTDIR}/main.o \ - ${OBJECTDIR}/tasks.o + ${OBJECTDIR}/tasks.o \ + ${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \ + ${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \ + ${OBJECTDIR}/tasks_pthread.o # C Compiler Flags @@ -109,6 +112,21 @@ ${OBJECTDIR}/tasks.o: tasks.cpp ${RM} "$@.d" $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp +${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + ${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + +${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + ${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + +${OBJECTDIR}/tasks_pthread.o: tasks_pthread.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks_pthread.o tasks_pthread.cpp + # Subprojects .build-subprojects: diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-impl.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-impl.mk index 24d259d..13ab52c 100644 --- a/software/raspberry/superviseur-robot/nbproject/Makefile-impl.mk +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-impl.mk @@ -31,7 +31,7 @@ DEFAULTCONF=Debug CONF=${DEFAULTCONF} # All Configurations -ALLCONFS=Debug Release Debug__RPI_ +ALLCONFS=Debug Release Debug__RPI_ Debug__Pthread_ # build diff --git a/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk b/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk index 9dbbe3a..e97628a 100644 --- a/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk +++ b/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk @@ -30,6 +30,14 @@ CND_ARTIFACT_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/superviseur-robot CND_PACKAGE_DIR_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/package CND_PACKAGE_NAME_Debug__RPI_=superviseur-robot.tar CND_PACKAGE_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/package/superviseur-robot.tar +# Debug__Pthread_ configuration +CND_PLATFORM_Debug__Pthread_=GNU-Linux +CND_ARTIFACT_DIR_Debug__Pthread_=dist/Debug__Pthread_/GNU-Linux +CND_ARTIFACT_NAME_Debug__Pthread_=superviseur-robot +CND_ARTIFACT_PATH_Debug__Pthread_=dist/Debug__Pthread_/GNU-Linux/superviseur-robot +CND_PACKAGE_DIR_Debug__Pthread_=dist/Debug__Pthread_/GNU-Linux/package +CND_PACKAGE_NAME_Debug__Pthread_=superviseur-robot.tar +CND_PACKAGE_PATH_Debug__Pthread_=dist/Debug__Pthread_/GNU-Linux/package/superviseur-robot.tar # # include compiler specific variables # diff --git a/software/raspberry/superviseur-robot/nbproject/Package-Debug__Pthread_.bash b/software/raspberry/superviseur-robot/nbproject/Package-Debug__Pthread_.bash new file mode 100644 index 0000000..bbc2489 --- /dev/null +++ b/software/raspberry/superviseur-robot/nbproject/Package-Debug__Pthread_.bash @@ -0,0 +1,76 @@ +#!/bin/bash -x + +# +# Generated - do not edit! +# + +# Macros +TOP=`pwd` +CND_PLATFORM=GNU-Linux +CND_CONF=Debug__Pthread_ +CND_DISTDIR=dist +CND_BUILDDIR=build +CND_DLIB_EXT=so +NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging +TMPDIRNAME=tmp-packaging +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/superviseur-robot +OUTPUT_BASENAME=superviseur-robot +PACKAGE_TOP_DIR=superviseur-robot/ + +# Functions +function checkReturnCode +{ + rc=$? + if [ $rc != 0 ] + then + exit $rc + fi +} +function makeDirectory +# $1 directory path +# $2 permission (optional) +{ + mkdir -p "$1" + checkReturnCode + if [ "$2" != "" ] + then + chmod $2 "$1" + checkReturnCode + fi +} +function copyFileToTmpDir +# $1 from-file path +# $2 to-file path +# $3 permission +{ + cp "$1" "$2" + checkReturnCode + if [ "$3" != "" ] + then + chmod $3 "$2" + checkReturnCode + fi +} + +# Setup +cd "${TOP}" +mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package +rm -rf ${NBTMPDIR} +mkdir -p ${NBTMPDIR} + +# Copy files and create directories and links +cd "${TOP}" +makeDirectory "${NBTMPDIR}/superviseur-robot/bin" +copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 + + +# Generate tar file +cd "${TOP}" +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur-robot.tar +cd ${NBTMPDIR} +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/superviseur-robot.tar * +checkReturnCode + +# Cleanup +cd "${TOP}" +rm -rf ${NBTMPDIR} diff --git a/software/raspberry/superviseur-robot/nbproject/configurations.xml b/software/raspberry/superviseur-robot/nbproject/configurations.xml index a8a96fb..5c2bc32 100644 --- a/software/raspberry/superviseur-robot/nbproject/configurations.xml +++ b/software/raspberry/superviseur-robot/nbproject/configurations.xml @@ -5,6 +5,8 @@ displayName="Header Files" projectFiles="true"> ./lib/camera.h + /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.h + /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.h ./lib/definitions.h ./lib/image.h ./lib/img.h @@ -14,6 +16,7 @@ ./lib/robot.h ./lib/server.h ./tasks.h + tasks_pthread.h ./lib/camera.cpp + /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp + /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp ./lib/image.cpp ./lib/img.cpp ./main.cpp @@ -33,6 +38,7 @@ ./lib/robot.cpp ./lib/server.cpp ./tasks.cpp + tasks_pthread.cpp ./Makefile + + /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib + ./Makefile @@ -122,6 +131,30 @@ + + + + + + + + + + + + @@ -185,6 +218,30 @@ + + + + + + + + + + + + @@ -265,6 +322,128 @@ + + + + + + + + + + + + + + + + default + true + false + + + + + ./ + ./lib + + -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy + + + + ./ + ./lib + + -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables + + _WITH_TRACE_ + __FOR_PC__ + __WITH_PTHREAD__ + + + + + `pkg-config --libs opencv` + + -lpthread -lrt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/software/raspberry/superviseur-robot/nbproject/private/Makefile-variables.mk b/software/raspberry/superviseur-robot/nbproject/private/Makefile-variables.mk index 949e112..bde17d1 100644 --- a/software/raspberry/superviseur-robot/nbproject/private/Makefile-variables.mk +++ b/software/raspberry/superviseur-robot/nbproject/private/Makefile-variables.mk @@ -6,3 +6,4 @@ # Debug configuration # Release configuration # Debug__RPI_ configuration +# Debug__Pthread_ configuration diff --git a/software/raspberry/superviseur-robot/nbproject/private/configurations.xml b/software/raspberry/superviseur-robot/nbproject/private/configurations.xml index 393661c..b55dcb1 100644 --- a/software/raspberry/superviseur-robot/nbproject/private/configurations.xml +++ b/software/raspberry/superviseur-robot/nbproject/private/configurations.xml @@ -105,5 +105,42 @@ + + + localhost + 2 + + + + + + + + + + + + + + + gdb + + + + sudo "${OUTPUT_PATH}" + sudo -E "${OUTPUT_PATH}" + pkexec "${OUTPUT_PATH}" + "${OUTPUT_PATH}" + + "${OUTPUT_PATH}" + + true + 1 + 0 + 0 + + + + diff --git a/software/raspberry/superviseur-robot/nbproject/private/private.xml b/software/raspberry/superviseur-robot/nbproject/private/private.xml index 7a2adea..e64b33b 100644 --- a/software/raspberry/superviseur-robot/nbproject/private/private.xml +++ b/software/raspberry/superviseur-robot/nbproject/private/private.xml @@ -2,21 +2,27 @@ 1 - 0 + 3 file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/monitor.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/img.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/img.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/robot.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks_pthread.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/image.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/server.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks_pthread.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/message.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/main.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.cpp diff --git a/software/raspberry/superviseur-robot/nbproject/project.xml b/software/raspberry/superviseur-robot/nbproject/project.xml index 3d6436b..5a95dd1 100644 --- a/software/raspberry/superviseur-robot/nbproject/project.xml +++ b/software/raspberry/superviseur-robot/nbproject/project.xml @@ -9,7 +9,9 @@ h UTF-8 - + + /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib + Debug @@ -23,6 +25,10 @@ Debug__RPI_ 1 + + Debug__Pthread_ + 1 + false diff --git a/software/raspberry/superviseur-robot/tasks.h b/software/raspberry/superviseur-robot/tasks.h index 489a0e6..b4127b8 100644 --- a/software/raspberry/superviseur-robot/tasks.h +++ b/software/raspberry/superviseur-robot/tasks.h @@ -23,8 +23,8 @@ * \brief Miscellaneous functions used for destijl project. */ -#ifndef FUNCTIONS_H -#define FUNCTIONS_H +#ifndef __TASKS_H__ +#define __TASKS_H__ #include #include diff --git a/software/raspberry/superviseur-robot/tasks_pthread.cpp b/software/raspberry/superviseur-robot/tasks_pthread.cpp new file mode 100644 index 0000000..6e00725 --- /dev/null +++ b/software/raspberry/superviseur-robot/tasks_pthread.cpp @@ -0,0 +1,263 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file functions.h + * \author PE.Hladik + * \version 1.0 + * \date 06/06/2017 + * \brief Miscellaneous functions used for destijl project. + */ + +#include "tasks_pthread.h" + +#ifdef __WITH_PTHREAD__ +char mode_start; + +void write_in_queue(RT_QUEUE *, MessageToMon); + +void f_server(void *arg) { + int err; + /* INIT */ + RT_TASK_INFO info; + rt_task_inquire(NULL, &info); + printf("Init %s\n", info.name); + rt_sem_p(&sem_barrier, TM_INFINITE); + + err=openServer(DEFAULT_SERVER_PORT); + + if (err < 0) { + printf("Failed to start server: %s\n", strerror(-err)); + exit(EXIT_FAILURE); + } else { +#ifdef _WITH_TRACE_ + printf("%s: server started\n", info.name); +#endif + //Waiting for a client to connect + err=acceptClient(); + + if (err<0) { + printf("Client accept failed: %s\n", strerror(-err)); + exit(EXIT_FAILURE); + } + +#ifdef _WITH_TRACE_ + printf ("client connected: %d\n", err); + printf ("Rock'n'roll baby !\n"); +#endif + rt_sem_broadcast(&sem_serverOk); + } +} + +void f_sendToMon(void * arg) { + int err; + MessageToMon msg; + + /* INIT */ + RT_TASK_INFO info; + rt_task_inquire(NULL, &info); + printf("Init %s\n", info.name); + rt_sem_p(&sem_barrier, TM_INFINITE); + +#ifdef _WITH_TRACE_ + printf("%s : waiting for sem_serverOk\n", info.name); +#endif + rt_sem_p(&sem_serverOk, TM_INFINITE); + while (1) { + +#ifdef _WITH_TRACE_ + printf("%s : waiting for a message in queue\n", info.name); +#endif + if (rt_queue_read(&q_messageToMon, &msg, sizeof (MessageToRobot), TM_INFINITE) >= 0) { +#ifdef _WITH_TRACE_ + printf("%s : message {%s,%s} in queue\n", info.name, msg.header, (char*)msg.data); +#endif + + send_message_to_monitor(msg.header, msg.data); + free_msgToMon_data(&msg); + rt_queue_free(&q_messageToMon, &msg); + } else { + printf("Error msg queue write: %s\n", strerror(-err)); + } + } +} + +void f_receiveFromMon(void *arg) { + MessageFromMon msg; + int err; + + /* INIT */ + RT_TASK_INFO info; + rt_task_inquire(NULL, &info); + printf("Init %s\n", info.name); + rt_sem_p(&sem_barrier, TM_INFINITE); + +#ifdef _WITH_TRACE_ + printf("%s : waiting for sem_serverOk\n", info.name); +#endif + rt_sem_p(&sem_serverOk, TM_INFINITE); + do { +#ifdef _WITH_TRACE_ + printf("%s : waiting for a message from monitor\n", info.name); +#endif + err = receive_message_from_monitor(msg.header, msg.data); +#ifdef _WITH_TRACE_ + printf("%s: msg {header:%s,data=%s} received from UI\n", info.name, msg.header, msg.data); +#endif + if (strcmp(msg.header, HEADER_MTS_COM_DMB) == 0) { + if (msg.data[0] == OPEN_COM_DMB) { // Open communication supervisor-robot +#ifdef _WITH_TRACE_ + printf("%s: message open Xbee communication\n", info.name); +#endif + rt_sem_v(&sem_openComRobot); + } + } else if (strcmp(msg.header, HEADER_MTS_DMB_ORDER) == 0) { + if (msg.data[0] == DMB_START_WITHOUT_WD) { // Start robot +#ifdef _WITH_TRACE_ + printf("%s: message start robot\n", info.name); +#endif + rt_sem_v(&sem_startRobot); + + } else if ((msg.data[0] == DMB_GO_BACK) + || (msg.data[0] == DMB_GO_FORWARD) + || (msg.data[0] == DMB_GO_LEFT) + || (msg.data[0] == DMB_GO_RIGHT) + || (msg.data[0] == DMB_STOP_MOVE)) { + + rt_mutex_acquire(&mutex_move, TM_INFINITE); + robotMove = msg.data[0]; + rt_mutex_release(&mutex_move); +#ifdef _WITH_TRACE_ + printf("%s: message update movement with %c\n", info.name, robotMove); +#endif + + } + } + } while (err > 0); + +} + +void f_openComRobot(void * arg) { + int err; + + /* INIT */ + RT_TASK_INFO info; + rt_task_inquire(NULL, &info); + printf("Init %s\n", info.name); + rt_sem_p(&sem_barrier, TM_INFINITE); + + while (1) { +#ifdef _WITH_TRACE_ + printf("%s : Wait sem_openComRobot\n", info.name); +#endif + rt_sem_p(&sem_openComRobot, TM_INFINITE); +#ifdef _WITH_TRACE_ + printf("%s : sem_openComRobot arrived => open communication robot\n", info.name); +#endif + err = open_communication_robot(); + if (err == 0) { +#ifdef _WITH_TRACE_ + printf("%s : the communication is opened\n", info.name); +#endif + MessageToMon msg; + set_msgToMon_header(&msg, (char*)HEADER_STM_ACK); + write_in_queue(&q_messageToMon, msg); + } else { + MessageToMon msg; + set_msgToMon_header(&msg, (char*)HEADER_STM_NO_ACK); + write_in_queue(&q_messageToMon, msg); + } + } +} + +void f_startRobot(void * arg) { + int err; + + /* INIT */ + RT_TASK_INFO info; + rt_task_inquire(NULL, &info); + printf("Init %s\n", info.name); + rt_sem_p(&sem_barrier, TM_INFINITE); + + while (1) { +#ifdef _WITH_TRACE_ + printf("%s : Wait sem_startRobot\n", info.name); +#endif + rt_sem_p(&sem_startRobot, TM_INFINITE); +#ifdef _WITH_TRACE_ + printf("%s : sem_startRobot arrived => Start robot\n", info.name); +#endif + err = send_command_to_robot(DMB_START_WITHOUT_WD); + if (err == 0) { +#ifdef _WITH_TRACE_ + printf("%s : the robot is started\n", info.name); +#endif + rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); + robotStarted = 1; + rt_mutex_release(&mutex_robotStarted); + MessageToMon msg; + set_msgToMon_header(&msg, (char*)HEADER_STM_ACK); + write_in_queue(&q_messageToMon, msg); + } else { + MessageToMon msg; + set_msgToMon_header(&msg, (char*)HEADER_STM_NO_ACK); + write_in_queue(&q_messageToMon, msg); + } + } +} + +void f_move(void *arg) { + /* INIT */ + RT_TASK_INFO info; + rt_task_inquire(NULL, &info); + printf("Init %s\n", info.name); + rt_sem_p(&sem_barrier, TM_INFINITE); + + /* PERIODIC START */ +#ifdef _WITH_PERIODIC_TRACE_ + printf("%s: start period\n", info.name); +#endif + rt_task_set_periodic(NULL, TM_NOW, 100000000); + while (1) { +#ifdef _WITH_PERIODIC_TRACE_ + printf("%s: Wait period \n", info.name); +#endif + rt_task_wait_period(NULL); +#ifdef _WITH_PERIODIC_TRACE_ + printf("%s: Periodic activation\n", info.name); + printf("%s: move equals %c\n", info.name, robotMove); +#endif + rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); + if (robotStarted) { + rt_mutex_acquire(&mutex_move, TM_INFINITE); + send_command_to_robot(robotMove); + rt_mutex_release(&mutex_move); +#ifdef _WITH_TRACE_ + printf("%s: the movement %c was sent\n", info.name, robotMove); +#endif + } + rt_mutex_release(&mutex_robotStarted); + } +} + +void write_in_queue(RT_QUEUE *queue, MessageToMon msg) { + void *buff; + buff = rt_queue_alloc(&q_messageToMon, sizeof (MessageToMon)); + memcpy(buff, &msg, sizeof (MessageToMon)); + rt_queue_send(&q_messageToMon, buff, sizeof (MessageToMon), Q_NORMAL); +} +#endif //__WITH_PTHREAD__ \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/tasks_pthread.h b/software/raspberry/superviseur-robot/tasks_pthread.h new file mode 100644 index 0000000..71dd7b4 --- /dev/null +++ b/software/raspberry/superviseur-robot/tasks_pthread.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file functions.h + * \author PE.Hladik + * \version 1.0 + * \date 06/06/2017 + * \brief Miscellaneous functions used for destijl project. + */ + +#ifndef __TASKS_H__ +#define __TASKS_H__ + +#ifdef __WITH_PTHREAD__ +#include +#include +#include + +#include + +#include "monitor.h" +#include "robot.h" +#include "image.h" +#include "message.h" +#include "server.h" + +extern RT_TASK th_server; +extern RT_TASK th_sendToMon; +extern RT_TASK th_receiveFromMon; +extern RT_TASK th_openComRobot; +extern RT_TASK th_startRobot; +extern RT_TASK th_move; + +extern RT_MUTEX mutex_robotStarted; +extern RT_MUTEX mutex_move; + +extern RT_SEM sem_barrier; +extern RT_SEM sem_openComRobot; +extern RT_SEM sem_serverOk; +extern RT_SEM sem_startRobot; + +extern RT_QUEUE q_messageToMon; + +extern int etatCommMoniteur; +extern int robotStarted; +extern char robotMove; + +extern int MSG_QUEUE_SIZE; + +extern int PRIORITY_TSERVER; +extern int PRIORITY_TOPENCOMROBOT; +extern int PRIORITY_TMOVE; +extern int PRIORITY_TSENDTOMON; +extern int PRIORITY_TRECEIVEFROMMON; +extern int PRIORITY_TSTARTROBOT; + +/** + * \brief Thread handling server communication. + */ +void f_server(void *arg); + +/** + * \brief Thread handling communication to monitor. + */ +void f_sendToMon(void *arg); + +/** + * \brief Thread handling communication from monitor. + */ +void f_receiveFromMon(void *arg); + +/** + * \brief Thread handling opening of robot communication. + */ +void f_openComRobot(void * arg); + +/** + * \brief Thread handling robot mouvements. + */ +void f_move(void *arg); + +/** + * \brief Thread handling robot activation. + */ +void f_startRobot(void *arg); + +#endif // __WITH_PTHREAD__ +#endif /* __TASKS_H__ */ + From 7f0be2d5fd08ff8db06b283cdaad135de5ee7725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20DI=20MERCURIO?= Date: Fri, 21 Dec 2018 16:36:52 +0100 Subject: [PATCH 03/10] =?UTF-8?q?Classe=20comRobot=20partiellement=20debug?= =?UTF-8?q?g=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GNU-Linux/superviseur-robot | Bin 0 -> 956776 bytes .../superviseur-robot/lib/camera.cpp | 2 +- .../superviseur-robot/lib/commonitor.cpp | 203 ++++--- .../superviseur-robot/lib/commonitor.h | 2 + .../superviseur-robot/lib/comrobot.cpp | 498 ++++++++-------- .../superviseur-robot/lib/comrobot.h | 179 ++++-- .../raspberry/superviseur-robot/lib/img.cpp | 20 +- .../raspberry/superviseur-robot/lib/img.h | 2 +- .../superviseur-robot/lib/messages.cpp | 231 +------- .../superviseur-robot/lib/messages.h | 193 +------ software/raspberry/superviseur-robot/main.cpp | 199 +------ .../nbproject/Makefile-Debug.mk | 12 + .../nbproject/Makefile-Debug__Pthread_.mk | 40 +- .../nbproject/Makefile-Debug__RPI_.mk | 12 + .../nbproject/Makefile-Release.mk | 12 + .../nbproject/configurations.xml | 70 ++- .../nbproject/private/configurations.xml | 2 + .../nbproject/private/private.xml | 18 +- .../raspberry/superviseur-robot/tasks.cpp | 22 +- software/raspberry/superviseur-robot/tasks.h | 151 +++-- .../superviseur-robot/tasks_pthread.cpp | 538 ++++++++++-------- .../superviseur-robot/tasks_pthread.h | 163 +++--- software/robot/src/cmdManager.c | 2 +- 23 files changed, 1184 insertions(+), 1387 deletions(-) create mode 100755 software/raspberry/superviseur-robot/dist/Debug__Pthread_/GNU-Linux/superviseur-robot diff --git a/software/raspberry/superviseur-robot/dist/Debug__Pthread_/GNU-Linux/superviseur-robot b/software/raspberry/superviseur-robot/dist/Debug__Pthread_/GNU-Linux/superviseur-robot new file mode 100755 index 0000000000000000000000000000000000000000..ac66d60b410644327468c8d5b7f5e6120e0b608e GIT binary patch literal 956776 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.C^t#BQg0DrkP4rWJme_#a!i&$c+q}z@C2?yV?cw1C9F%XhyN!u4c19n2&WC6;77bPU-7{d#I>Y0xg9wM+v%$564)k}!psFId?qoUG2kvy3@|vP$K!)Z;P=ygjdx7R09Y=4& z`%aP2%AnLUG1)_n%9E$n2)F{iRsXqmN8koq2OY2w!~l9Vj8tW zp2Zx?B1D>)*)QT@E-_KtX&F)-U0d3i%%xGYV_w9bWxAMQ4e(#Wn4NGmL(Cso%4CeW zyB7bej%j!quYZd9BBKzQWA>vCWQmE!j4*3V+D%xv#q725nt+(9D2}+8qu8Lz5%ZuD zmdi13)x>3jnAZ>!A2SO>OYRuoL39K$`I-rlH)a+#9rDFI>Bry6MKC8)>uWiHb3iTj ze67wv`9kEt9C^h@3%(6ln~0d2MJOX)!Me>7!7oAawHpLdXI}^E8LCu5h1h}LJQ*q= zdhA2KMP*-yn4mp*d2UcN>4Ho0iyjsFW8Kv7IFq`qRwT^mQF;8%TL-8IyN7J>b4Qt-ro@?8b@$`rt<>7&^fJ2{7xer15W7;bp9IaZ%+-2 zV+M{HBSazJJCgqG6^&4UPK2yCbjWbw``HlEFVD@cAp<%?5JGbRdvX+Iq=pl2Y($xaYg+oZxw`ie?*UPA!VjEb#YPm zW!=T-{Hc*!u@;+p5xhk%SJbAyF3PcLUbS{C+lQR%I*F}_%2W7we zknB0+4sh~8($j~wx+LXlL(akxEz)~A$kfk4JLghGL(aiT^lTV61DSOn3>zt9cSY*7 zOOd9hekr3aLCNeu3b?59DfJ)EfbvY?LAbC%wWT`Xx-LaL!PVxmZqvDp_^*tz8_)qR zLn&!U*SdT!@5yV*DT=*$2DJHx%9+=Yu6g-Z(1VN)?nO3Ov3{m*0c~$2^#jS}KkNQ; zh8rNRb>8r}=!HYE0WM;P+EX4rMMFlk-=T2>n-n;AD60m>VHk?_-Q@z<+S|0$`10tY ze8nv4yUuC28rY0#sV~d7F*>*{l}*(Eub#`*Ep?l`(b{XNOzQ*6K##^HwO7t6 zV`@NvXx4L}EO2S6vJA?O44Rn>Zn2_uF6y>aip6#djt*sc9zMmI4Ce#uU|h)J8^C4P zsjpXd6+b~yh3DCKBO)c0w-J- zVmrCDm{*8QD+)?!Lp!Y6TX)&vwpWV8vs$6<3X_vhFa$4G`C=1YTXk<*s$m zQe?V7rIW0!or}6{m0|`Y;K?vJ!Z8Be)`UWi%PzshbV-vZgcO9xg>hKaSztcYY^k zigFZUr?`l^?4@eM4tfZe+rzS*WuUEgsd^+oxZm$p24;N##u1OjmErb^HKt`c%(?-_ zU6&;}W7G)yd#I|R2AP@#xt13}Wrd=0RXFwy)+Bl`4iMF<16p%KRW+eCviqf#NGU7p z?xJo@pjhmC;^y3kO zR!)v-+*XJ;aauP+PYd`DIIY=p9M-ux)?rC9dM|o`);OCydE%G}nXom0^9PegpNJ7+ zK1Y)wd?p={(>}txTM1U5Nk`?m2YCPZa5#t$>Meid;;}jB;m=K&&eEqA6wya6UW=7q zxmRZxH6G&p z5Y8D)Mdrg*6U^l@B4lk}Pl(Zo%lbB!akHt~7bbzu?)ky@e67>-fnpCK z#E}a2f%xlRlHw-5J8OO=;{(OsMKJs!G~dAd&I%4jECTzm50PO$kVFHt+d9BYJ>&z$ zHYI6N!9EaweP#T)77>2U_ws>a$A|NW(CP%MLF+lhE=6D;enM3b^MNFCqDVi$_nAp5 zL0&#k>~VxRQo%kDzkWk0e!=%f&G&quSTQ7w-z#pZ5HDyR+7W-`;zr=4iCzS=nC4VV z+J>IA2c5!1wF3od@v44x>y$MI#o~>i4WZ}>S8Uw@A*w4eK2z9|3l0ZMFv+ zrIxUbavq@cA>3OZ%zrZT11u{~&pnw;K{ zvtZtp<}5Pg653C-oWN5r(1{eSc0qqFB9J>?a-Q~*!>6LvWe__Mk<4-me|r=gmNHPTvLspNDi zeVho=bxeAiL_x6v`YJ+40|XX7cNB&8H4b<{4&wg6yrMn6dm@x1V#!)Kh$8XX(6Qj` zNuAbCDyb-Mirs^d<_D~zDN$i*ZO>`7zEx>$$!T?eHS9DFy+2pGln3w6L)V^D4-K%^Z4=Svx?J(sGH*24hVIV(wJ5$Rr@7xzEodo)5xk}O%14oz?n1#?kt znvTv;)OZEBFJ`yj7uPIN&$uZ~;gn z>6F8CDhi%K_FDY`zl30VGj^5QTMKG$R%eTfx&<{jeIBA3W_7VR{|b}(!cU@6;CtzK zsKsZr`a-***l)wN$B{iu0pf=7cgwhm{M|6_Y5uM$j!SxVOC4Vf)(Hc(zH&w%#TG)~ z=C{5z_nLKv;>|2e=?x=RQa91OG18o03pOx<6CjkPCuSzpg{B#c@h@vGoQ!EC#F_k< zWsQFs>8qG|6w(bX<*1EXl`;?IpY27#MN#SI!F4@B{S7;nlm-u4W${i(hp6-UiceIgVTIUOHEE#aJr8YMm=$c zpRq9!oaL(teHnJYfb*w))EzrLptg6ld1!yn_y*$~{d4d6&*0~?zP9*jCpGkof-5k~ zx0d1Oegu;%s2{_HbzhQ6Rafpy)z-+@UD(k-iSNq@B}umA>vY(HgJ^yiNt`oQrERK7 zV!n5xfE` zFgh$Xe^wLg>RO-*%&Nyfsla;oID~{W$lPx)zLMJaK7h%9)iCoB{@G3xEI@-oIhbgG zz`oO<5Y}6f`PPr(IwiilB9tVuD0l;nz#53tQ3ys()F8_E+E_2*`#FS?#1RF5q>^8R z)3*?k<#Gm#T9K$h^w)}`pThSMgp$NBxe^Caa7qC3XL0&Hf{_n%lLXoo$4Uj?QP^N9 zNn|k?S18a9txSk1gus&2yL*y_iQQ-wx-5K8*SSyQC4J;#ifxY&M=Ge40!~+)@uF@# zP9*hq^4oYEsQyYnev0N9_6l(YnYz6MGzZ719F>qnEOi=1lBC zO)xNIHtgF;QzweXbUC3g?8f(oO?=Ra@kcJE*t!VZHPYN1sjJ(+7hQ3nC9j1y7!;vv z7Jb3l*GoxtHPRG2B2v1&C_>jmUPA2U?uvNMQr~hh#jXnH+eybKh$3`tjzAvDq(Z|zEv0os>k)*1Cw59J*+~CVN^Ov&j;QS8+ zR{9lAMB&Rg?#hqLl;iP!1zi)p)fL5-K!_trQreg{vl9`sM?2uv6N(*(z&T0lNVlHs z)j5fJLObTO!Reu;yQoy494K~iq%`UY?Z&@{*bAK%af+!Y6nie5ZzpY>*n3S)Y<@1{ zT}ITKiJ}PY^ot2Fs1;!N<&RuUv2h4t?zS&S7dLPWW5TQn!7R5F7E`RT~^;{H55#2yvv4 z>doW)-8ybOe`ADtg3Nu6Ul$RKIZ>FT($q#(n1~gS*6YoDC^j8J97%E!m&R^oImD#W zT(5{Jwgm#`Ss&2cBJS=LG3}=h17}G`iD1l$!Xz~U{n?xN{uMiu^zpX&D0Uk{97&SfjcLFBEPkBPT(6o^?9T{X zkhH4?z8bN-YD(7`vQ9zYucfytgQ!ImTM)rW+evFCi6V3jqcNg8wpPp!Og*L8_K^bA z_0aW|afm(?QUYE@qu3Y21&~j5Xf(N{22>0=blFC%0A~*ZXA-5O5s|JCsS(DvD}2eO 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�hfB|dD=b9r$XGHSH9omgLST#*@V~9 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 R<@ry)$v(fyd%(L4{x3clzIgxu literal 0 HcmV?d00001 diff --git a/software/raspberry/superviseur-robot/lib/camera.cpp b/software/raspberry/superviseur-robot/lib/camera.cpp index f14155a..4203b61 100644 --- a/software/raspberry/superviseur-robot/lib/camera.cpp +++ b/software/raspberry/superviseur-robot/lib/camera.cpp @@ -1,4 +1,4 @@ -/* + /* * Copyright (C) 2018 dimercur * * This program is free software: you can redistribute it and/or modify diff --git a/software/raspberry/superviseur-robot/lib/commonitor.cpp b/software/raspberry/superviseur-robot/lib/commonitor.cpp index 9bb0d96..fa3aa36 100644 --- a/software/raspberry/superviseur-robot/lib/commonitor.cpp +++ b/software/raspberry/superviseur-robot/lib/commonitor.cpp @@ -33,25 +33,25 @@ */ const string LABEL_MONITOR_ANSWER_ACK = "AACK"; const string LABEL_MONITOR_ANSWER_NACK = "ANAK"; -const string LABEL_MONITOR_ANSWER_LOST_DMB= "ATIM"; -const string LABEL_MONITOR_ANSWER_TIMEOUT= "ATIM"; -const string LABEL_MONITOR_ANSWER_CMD_REJECTED= "ACRJ"; +const string LABEL_MONITOR_ANSWER_COM_ERROR = "ACER"; +const string LABEL_MONITOR_ANSWER_TIMEOUT = "ATIM"; +const string LABEL_MONITOR_ANSWER_CMD_REJECTED = "ACRJ"; const string LABEL_MONITOR_MESSAGE = "MSSG"; -const string LABEL_MONITOR_CAMERA_OPEN= "COPN"; -const string LABEL_MONITOR_CAMERA_CLOSE= "CCLS"; +const string LABEL_MONITOR_CAMERA_OPEN = "COPN"; +const string LABEL_MONITOR_CAMERA_CLOSE = "CCLS"; const string LABEL_MONITOR_CAMERA_IMAGE = "CIMG"; const string LABEL_MONITOR_CAMERA_ARENA_ASK = "CASA"; const string LABEL_MONITOR_CAMERA_ARENA_INFIRME = "CAIN"; const string LABEL_MONITOR_CAMERA_ARENA_CONFIRM = "CACO"; -const string LABEL_MONITOR_CAMERA_POSITION_COMPUTE= "CPCO"; -const string LABEL_MONITOR_CAMERA_POSITION_STOP= "CPST"; +const string LABEL_MONITOR_CAMERA_POSITION_COMPUTE = "CPCO"; +const string LABEL_MONITOR_CAMERA_POSITION_STOP = "CPST"; const string LABEL_MONITOR_CAMERA_POSITION = "CPOS"; const string LABEL_MONITOR_ROBOT_COM_OPEN = "ROPN"; const string LABEL_MONITOR_ROBOT_COM_CLOSE = "RCLS"; const string LABEL_MONITOR_ROBOT_PING = "RPIN"; const string LABEL_MONITOR_ROBOT_RESET = "RRST"; -const string LABEL_MONITOR_ROBOT_START_WITHOUT_WD= "RSOW"; -const string LABEL_MONITOR_ROBOT_START_WITH_WD= "RSWW"; +const string LABEL_MONITOR_ROBOT_START_WITHOUT_WD = "RSOW"; +const string LABEL_MONITOR_ROBOT_START_WITH_WD = "RSWW"; const string LABEL_MONITOR_ROBOT_RELOAD_WD = "RLDW"; const string LABEL_MONITOR_ROBOT_MOVE = "RMOV"; const string LABEL_MONITOR_ROBOT_TURN = "RTRN"; @@ -80,7 +80,7 @@ int ComMonitor::Open(int port) { socketFD = socket(AF_INET, SOCK_STREAM, 0); if (socketFD < 0) { - throw std::runtime_error{"ComMonitor::Open : Can not create socket"}; + throw std::runtime_error{"Can not create socket"}; } server.sin_addr.s_addr = INADDR_ANY; @@ -88,7 +88,8 @@ int ComMonitor::Open(int port) { server.sin_port = htons(port); if (bind(socketFD, (struct sockaddr *) &server, sizeof (server)) < 0) { - throw std::runtime_error{"ComMonitor::Open : Can not bind socket on port " + std::to_string(port)}; + cerr<<"["<<__PRETTY_FUNCTION__<<"] Can not bind socket ("< 0) { if (data != '\n') { - s+=data; + s += data; } else endReception = true; } } - if (length<=0) msg = new Message(MESSAGE_MONITOR_LOST); + if (length <= 0) msg = new Message(MESSAGE_MONITOR_LOST); else { - msg=StringToMessage(s); + msg = StringToMessage(s); } } // Call user method after read Read_Post(); - + return msg; } @@ -197,62 +196,56 @@ string ComMonitor::MessageToString(Message &msg) { string str; Message *localMsg = &msg; Position pos; - + id = msg.GetID(); switch (id) { - case MESSAGE_ANSWER: - switch (((MessageAnswer*)localMsg)->GetAnswer()) { - case ANSWER_ACK: - str.append(LABEL_MONITOR_ANSWER_ACK); - break; - case ANSWER_NACK: - str.append(LABEL_MONITOR_ANSWER_NACK); - break; - case ANSWER_LOST_ROBOT: - str.append(LABEL_MONITOR_ANSWER_LOST_DMB); - break; - case ANSWER_ROBOT_TIMEOUT: - str.append(LABEL_MONITOR_ANSWER_TIMEOUT); - break; - case ANSWER_ROBOT_UNKNOWN_COMMAND: - str.append(LABEL_MONITOR_ANSWER_CMD_REJECTED); - break; - case ANSWER_ROBOT_ERROR: - str.append(LABEL_MONITOR_ANSWER_CMD_REJECTED); - break; - default: - str.append(LABEL_MONITOR_ANSWER_NACK); - }; - + case MESSAGE_ANSWER_ACK : + str.append(LABEL_MONITOR_ANSWER_ACK); break; - case MESSAGE_POSITION: - pos = ((MessagePosition*)&msg)->GetPosition(); - + case MESSAGE_ANSWER_NACK: + str.append(LABEL_MONITOR_ANSWER_NACK); + break; + case MESSAGE_ANSWER_ROBOT_TIMEOUT: + str.append(LABEL_MONITOR_ANSWER_TIMEOUT); + break; + case MESSAGE_ANSWER_ROBOT_UNKNOWN_COMMAND: + str.append(LABEL_MONITOR_ANSWER_CMD_REJECTED); + break; + case MESSAGE_ANSWER_ROBOT_ERROR: + str.append(LABEL_MONITOR_ANSWER_CMD_REJECTED); + break; + case MESSAGE_ANSWER_COM_ERROR: + str.append(LABEL_MONITOR_ANSWER_COM_ERROR); + break; + case MESSAGE_CAM_POSITION: + pos = ((MessagePosition*) & msg)->GetPosition(); + str.append(LABEL_MONITOR_CAMERA_POSITION + LABEL_SEPARATOR_CHAR + to_string(pos.robotId) + ";" + to_string(pos.angle) + ";" + to_string(pos.center.x) + ";" + to_string(pos.center.y) + ";" + to_string(pos.direction.x) + ";" + to_string(pos.direction.y)); break; - case MESSAGE_IMAGE: - str.append(LABEL_MONITOR_CAMERA_IMAGE + LABEL_SEPARATOR_CHAR + ((MessageImg*) &msg)->GetImage()->ToBase64()); + case MESSAGE_CAM_IMAGE: + str.append(LABEL_MONITOR_CAMERA_IMAGE + LABEL_SEPARATOR_CHAR + ((MessageImg*) & msg)->GetImage()->ToBase64()); break; case MESSAGE_ROBOT_BATTERY_LEVEL: - str.append(LABEL_MONITOR_ROBOT_BATTERY_LEVEL + LABEL_SEPARATOR_CHAR + to_string(((MessageBattery*) &msg)->GetLevel())); + str.append(LABEL_MONITOR_ROBOT_BATTERY_LEVEL + LABEL_SEPARATOR_CHAR + to_string(((MessageBattery*) & msg)->GetLevel())); break; - case MESSAGE_ROBOT_CURRENT_STATE: - str.append(LABEL_MONITOR_ROBOT_CURRENT_STATE + LABEL_SEPARATOR_CHAR + to_string(((MessageState*) &msg)->GetState())); + case MESSAGE_ROBOT_STATE_BUSY: + str.append(LABEL_MONITOR_ROBOT_CURRENT_STATE + LABEL_SEPARATOR_CHAR + "1"); + break; + case MESSAGE_ROBOT_STATE_NOT_BUSY: + str.append(LABEL_MONITOR_ROBOT_CURRENT_STATE + LABEL_SEPARATOR_CHAR + "0"); break; case MESSAGE_LOG: - str.append(LABEL_MONITOR_MESSAGE + LABEL_SEPARATOR_CHAR + ((MessageString*) &msg)->GetString()); + str.append(LABEL_MONITOR_MESSAGE + LABEL_SEPARATOR_CHAR + ((MessageString*) & msg)->GetString()); break; case MESSAGE_EMPTY: str.append(""); //empty string break; default: - throw std::runtime_error - { - "ComMonitor::MessageToString (from ComMonitor::Write): Invalid message to send (" + msg.ToString() - }; + cerr<<"["<<__PRETTY_FUNCTION__<<"] (from ComMonitor::Write): Invalid message to send ("<Open(USART_FILENAME); +} + +/** + * Open serial link with robot + * @param usart Filename of usart to open + * @return File descriptor + * @throw std::runtime_error if it fails + */ +int ComRobot::Open(string usart) { + struct termios options; + + fd = open(usart.c_str(), O_RDWR | O_NOCTTY /*| O_NDELAY*/); //Open in blocking read/write mode if (fd == -1) { - //ERROR - CAN'T OPEN SERIAL PORT - throw std::runtime_error{"Error - Unable to open UART " + string(USART_FILENAME) + ". Ensure it is not in use by another application"}; + cerr<<"["<<__PRETTY_FUNCTION__<<"] Unable to open UART ("<fd, (void*) &receivedChar, 1); //Filestream, buffer to store in, number of bytes to read (max) - //printf ("W=%02X ", receivedChar); - - if (rxLength <= -1) { - this->lostCom = true; - printf("Warning: communication lost in ComStm32::Read\n"); - msg = new Message(); - - return msg; - } else if (rxLength == 0) { - // nothing to do - } else if (receivedChar == '<') { // start of frame received - i = 0; - - do { - rxLength = read(this->fd, (void*) &rxBuffer[i], 6 - i); //Filestream, buffer to store in, number of bytes to read (max) - - if (rxLength >= 0) - i = i + rxLength; - else { - printf("Error while reading (%i)", rxLength); - - return NULL; - } - } while (i < 6); - - if (rxBuffer[5] == '\n') { - messageComplete = true; - } - } - } - - /* Treatment of received message */ - msg = CharToMessage(rxBuffer); - - /* Call Post method for read */ - Read_Post(); - - return msg; -} - -/** - * Convert an array of char to its message representation (when receiving data from stm32) - * @param bytes Array of char - * @return Message corresponding to received array of char - */ -Message* ComRobot::CharToMessage(unsigned char *bytes) { - Message *msg = __null; - MessageFloat *msgf; - MessageBool *msgb; - - switch (bytes[0]) { - case LABEL_ANGLE_POSITION: - msgf = new MessageFloat(); - msgf->SetID(MESSAGE_ANGLE_POSITION); - msgf->SetValue(CharToFloat(&bytes[1])); - msg = (Message*) msgf; - - break; - case LABEL_ANGULAR_SPEED: - msgf = new MessageFloat(); - msgf->SetID(MESSAGE_ANGULAR_SPEED); - msgf->SetValue(CharToFloat(&bytes[1])); - msg = (Message*) msgf; - - break; - case LABEL_BATTERY_LEVEL: - msgf = new MessageFloat(); - msgf->SetID(MESSAGE_BATTERY); - msgf->SetValue(CharToFloat(&bytes[1])); - msg = (Message*) msgf; - - break; - case LABEL_BETA_ANGLE: - msgf = new MessageFloat(); - msgf->SetID(MESSAGE_BETA); - msgf->SetValue(CharToFloat(&bytes[1])); - msg = (Message*) msgf; - - break; - case LABEL_USER_PRESENCE: - msgb = new MessageBool(); - msgb->SetID(MESSAGE_USER_PRESENCE); - msgb->SetState(CharToBool(&bytes[1])); - msg = (Message*) msgb; - - break; - default: - printf("Unknown message received from robot (%i)\n", bytes[0]); - fflush(stdout); - msg = new Message(); - } - - if (msg == NULL) { - printf("Message is null (%02X)\n", bytes[0]); - fflush(stdout); - msg = new Message(); - } - - return msg; -} - -/** - * Convert an array of char to float - * @param bytes Array of char, containing a binary image of a float - * @return Float value - */ -float ComRobot::CharToFloat(unsigned char *bytes) { - unsigned long value; - - union { - unsigned char buffer[4]; - float f; - } convert; - - convert.buffer[0] = bytes[0]; - convert.buffer[1] = bytes[1]; - convert.buffer[2] = bytes[2]; - convert.buffer[3] = bytes[3]; - - //value = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0]); - - return convert.f; -} - -/** - * Convert an array of char to integer - * @param bytes Array of char, containing a binary image of an integer - * @return Integer value - */ -unsigned int ComRobot::CharToInt(unsigned char *bytes) { - unsigned long value; - - value = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0]); - - return (unsigned int) value; -} - -/** - * Convert an array of char to boolean - * @param bytes Array of char, containing a binary image of a boolean - * @return Boolean value - */ -bool ComRobot::CharToBool(unsigned char *bytes) { - unsigned long value; - - value = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | (bytes[0]); - - if (value == 0) return false; - - else return true; -} - /** * Send a message to robot * @param msg Message to send to robot @@ -266,29 +107,142 @@ bool ComRobot::CharToBool(unsigned char *bytes) { * @attention Write is blocking until message is written into buffer (linux side) * @warning Write is not thread save : check that multiple tasks can't access this method simultaneously */ -int ComRobot::Write(Message* msg) { - unsigned char buffer[7]; - int ret_val = 0; - - MessageToChar(msg, buffer); - - Write_Pre(); +Message *ComRobot::Write(Message* msg) { + Message *msgAnswer; + string s; if (this->fd != -1) { - int count = write(this->fd, &buffer[0], 7); //Filestream, bytes to write, number of bytes to write + + Write_Pre(); + + s=MessageToString(msg); + AddChecksum(s); + + //cout << "[" <<__PRETTY_FUNCTION__<<"] Send command: "<fd, s.c_str(), s.length()); //Filestream, bytes to write, number of bytes to write + if (count < 0) { - printf("Warning: UART TX error in ComStm32::Write\n"); - } else { - ret_val = 1; + cerr << "[" << __PRETTY_FUNCTION__ << "] UART TX error (" << to_string(count) << ")" << endl << flush; + msgAnswer = new Message(MESSAGE_ANSWER_COM_ERROR); + } else { /* write successfull, read answer from robot */ + + try { + s = Read(); + cout << "Answer = "<fd, (void*) &receivedChar, 1); //Filestream, buffer to store in, number of bytes to read (max) + if (rxLength ==0) { // timeout + // try again + rxLength = read(this->fd, (void*) &receivedChar, 1); //Filestream, buffer to store in, number of bytes to read (max) + if (rxLength ==0) { // re-timeout: it sucks ! + throw std::runtime_error {"ComRobot::Read: Timeout when reading from com port"}; + } + } else if (rxLength <0) { // big pb ! + throw std::runtime_error {"ComRobot::Read: Unknown problem when reading from com port"}; + } else { // everything ok + if ((receivedChar != '\r') && (receivedChar != '\n')) s += receivedChar; + } + } while ((receivedChar != '\r') && (receivedChar != '\n')); + + return s; +} + +Message *ComRobot::SendCommand(Message* msg, MessageID answerID, int maxRetries) { + int counter = maxRetries; + Message *msgSend; + Message *msgRcv; + Message *msgTmp; + + do { + msgSend = msg->Copy(); + cout << "S => " << msgSend->ToString() << endl << flush; + msgTmp = Write(msgSend); + cout << "R <= " << msgTmp->ToString() << endl << flush; + + if (msgTmp->CompareID(answerID)) counter = 0; + else counter--; + + if (counter == 0) msgRcv=msgTmp->Copy(); + + delete(msgTmp); + } while (counter); + + delete (msg); + + return msgRcv; +} + +/** + * Convert an array of char to its message representation (when receiving data from stm32) + * @param bytes Array of char + * @return Message corresponding to received array of char + */ +Message* ComRobot::StringToMessage(string s) { + Message *msg; + + switch (s[0]) { + case LABEL_ROBOT_OK: + msg=new Message(MESSAGE_ANSWER_ACK); + break; + case LABEL_ROBOT_ERROR: + msg=new Message(MESSAGE_ANSWER_ROBOT_ERROR); + break; + case LABEL_ROBOT_UNKNOWN_COMMAND: + msg=new Message(MESSAGE_ANSWER_ROBOT_UNKNOWN_COMMAND); + break; + case '0': + msg=new MessageBattery(MESSAGE_ROBOT_BATTERY_LEVEL, BATTERY_EMPTY); + break; + case '1': + msg=new MessageBattery(MESSAGE_ROBOT_BATTERY_LEVEL, BATTERY_LOW); + break; + case '2': + msg=new MessageBattery(MESSAGE_ROBOT_BATTERY_LEVEL, BATTERY_FULL); + break; + default: + msg=new Message(MESSAGE_ANSWER_ROBOT_ERROR); + cerr<<"["<<__PRETTY_FUNCTION__<<"] Unknown message received from robot (" << s <<")"<GetID()) { - case MESSAGE_TORQUE: - buffer[1] = LABEL_TORQUE; - val_f = ((MessageFloat*) msg)->GetValue(); - b = (unsigned char *) &val_f; - + case MESSAGE_ROBOT_PING: + s+=LABEL_ROBOT_PING; break; - case MESSAGE_EMERGENCY_STOP: - buffer[1] = LABEL_EMERGENCY_STOP; - if (((MessageBool*) msg)->GetState()) - val_i = 1; - else - val_i = 0; - b = (unsigned char *) &val_i; - + case MESSAGE_ROBOT_RESET: + s+=LABEL_ROBOT_RESET; + break; + case MESSAGE_ROBOT_POWEROFF: + s+=LABEL_ROBOT_POWEROFF; + break; + case MESSAGE_ROBOT_START_WITHOUT_WD: + s+=LABEL_ROBOT_START_WITHOUT_WD; + break; + case MESSAGE_ROBOT_START_WITH_WD: + s+=LABEL_ROBOT_START_WITH_WD; + break; + case MESSAGE_ROBOT_RELOAD_WD: + s+=LABEL_ROBOT_RELOAD_WD; + break; + case MESSAGE_ROBOT_BATTERY_GET: + s+=LABEL_ROBOT_GET_BATTERY; + break; + case MESSAGE_ROBOT_STATE_GET: + s+=LABEL_ROBOT_GET_STATE; + break; + case MESSAGE_ROBOT_GO_FORWARD: + s+=LABEL_ROBOT_MOVE; + s+=LABEL_ROBOT_SEPARATOR_CHAR; + s.append(to_string(500000)); + break; + case MESSAGE_ROBOT_GO_BACKWARD: + s+=LABEL_ROBOT_MOVE; + s+=LABEL_ROBOT_SEPARATOR_CHAR; + s.append(to_string(-500000)); + break; + case MESSAGE_ROBOT_GO_LEFT: + s+=LABEL_ROBOT_TURN; + s+=LABEL_ROBOT_SEPARATOR_CHAR; + s.append(to_string(90)); + break; + case MESSAGE_ROBOT_GO_RIGHT: + s+=LABEL_ROBOT_TURN; + s+=LABEL_ROBOT_SEPARATOR_CHAR; + s.append(to_string(-90)); + break; + case MESSAGE_ROBOT_MOVE: + s+=LABEL_ROBOT_MOVE; + s+=LABEL_ROBOT_SEPARATOR_CHAR; + s.append(to_string(((MessageInt*)msg)->GetValue())); + break; + case MESSAGE_ROBOT_TURN: + s+=LABEL_ROBOT_TURN; + s+=LABEL_ROBOT_SEPARATOR_CHAR; + s.append(to_string(((MessageInt*)msg)->GetValue())); break; default: - printf("Invalid message to send"); - val_i = 0; - b = (unsigned char *) &val_i; + cerr<<"["<<__PRETTY_FUNCTION__<<"] Invalid message for robot ("<ToString()<<")"< using namespace std; @@ -30,114 +31,168 @@ using namespace std; */ class ComRobot { public: + /** * Constructor */ - ComRobot() {} - + ComRobot() { + } + /** * Destructor */ - virtual ~ComRobot() {} - + virtual ~ComRobot() { + } + /** * Open serial link with robot * @return File descriptor * @throw std::runtime_error if it fails */ int Open(); - + + /** + * Open serial link with robot + * @param usart Filename of usart to open + * @return File descriptor + * @throw std::runtime_error if it fails + */ + int Open(string usart); + /** * Close serial link * @return Success if above 0, failure if below 0 */ int Close(); - - /** - * Get a message from robot - * @return Message currently received - * @attention A message object is created (new) when receiving data from robot. You MUST remember to destroy is (delete) after use - * @attention Read method is blocking until a message is received - * @warning Read is not thread safe : Do not call it in multiple tasks simultaneously - */ - Message* Read(); - + /** * Send a message to robot * @param msg Message to send to robot - * @return 1 if success, 0 otherwise - * @attention Message is destroyed (delete) after being sent. You do not need to delete it yourself + * @return A message containing either an answer (Ack/Nak/Timeout/Error) or a value (battery level, robot state) depending of the command + * @attention Input message is destroyed (delete) after being sent. You do not need to delete it yourself + * @attention Write produce an answer message. You have to dispose it (delete) when you have finished using it * @attention Write is blocking until message is written into buffer (linux side) * @warning Write is not thread save : check that multiple tasks can't access this method simultaneously */ - int Write(Message* msg); - - /** - * Function called at beginning of Read method - * Use it to do some synchronization (call of mutex, for example) - */ - virtual void Read_Pre() {} - - /** - * Function called at end of Read method - * Use it to do some synchronization (call of mutex, for example) - */ - virtual void Read_Post() {} - + Message *Write(Message* msg); + /** * Function called at beginning of Write method * Use it to do some synchronization (call of mutex, for example) */ - virtual void Write_Pre() {} - + virtual void Write_Pre() { + } + /** * Function called at end of Write method * Use it to do some synchronization (call of mutex, for example) */ - virtual void Write_Post() {} + virtual void Write_Post() { + } - static Message *Ping(); + Message *SendCommand(Message* msg, MessageID answerID, int maxRetries); + static Message *Ping() { + return new Message(MESSAGE_ROBOT_PING); + } + + static Message *Reset() { + return new Message(MESSAGE_ROBOT_RESET); + } + + static Message *PowerOff() { + return new Message(MESSAGE_ROBOT_POWEROFF); + } + + static Message *StartWithWD() { + return new Message(MESSAGE_ROBOT_START_WITH_WD); + } + + static Message *StartWithoutWD() { + return new Message(MESSAGE_ROBOT_START_WITHOUT_WD); + } + + static Message *ReloadWD() { + return new Message(MESSAGE_ROBOT_RELOAD_WD); + } + + static Message *Move(int length) { + return new MessageInt(MESSAGE_ROBOT_MOVE, length); + } + + static Message *Turn(int angle) { + return new MessageInt(MESSAGE_ROBOT_TURN, angle); + } + + static Message *Stop() { + return new Message(MESSAGE_ROBOT_STOP); + } + + static Message *GoForward() { + return new Message(MESSAGE_ROBOT_GO_FORWARD); + } + + static Message *GoBackward() { + return new Message(MESSAGE_ROBOT_GO_BACKWARD); + } + + static Message *GoLeft() { + return new Message(MESSAGE_ROBOT_GO_LEFT); + } + + static Message *GoRight() { + return new Message(MESSAGE_ROBOT_GO_RIGHT); + } + + static Message *GetBattery() { + return new Message(MESSAGE_ROBOT_BATTERY_GET); + } + + static Message *GetState() { + return new Message(MESSAGE_ROBOT_STATE_GET); + } + protected: /** * Serial link file descriptor */ int fd; - + /** - * Convert an array of char to float - * @param bytes Array of char, containing a binary image of a float - * @return Float value + * Get an answer from robot + * @return String containing answer from robot + * @attention Read method is blocking until a message is received (timeout of 500 ms) + * @warning Read is not thread safe : Do not call it in multiple tasks simultaneously */ - float CharToFloat(unsigned char *bytes); - + string Read(); + /** - * Convert an array of char to boolean - * @param bytes Array of char, containing a binary image of a boolean - * @return Boolean value - */ - bool CharToBool(unsigned char *bytes); - - /** - * Convert an array of char to integer - * @param bytes Array of char, containing a binary image of an integer - * @return Integer value - */ - unsigned int CharToInt(unsigned char *bytes); - - /** - * Convert an array of char to its message representation (when receiving data from stm32) - * @param bytes Array of char + * Convert a string to its message representation (when receiving data from robot) + * @param s String from robot containing answer * @return Message corresponding to received array of char */ - Message* CharToMessage(unsigned char *bytes); - + Message* StringToMessage(string s); + /** - * Convert a message to its array of char representation (for sending command to stm32) + * Convert a message to its string representation (for sending command to robot) * @param msg Message to be sent to robot - * @param buffer Array of char, image of message to send + * @return String containing command to robot */ - void MessageToChar(Message *msg, unsigned char *buffer); + string MessageToString(Message *msg); + + /** + * Add a checksum and carriage return to a command string + * @param[in,out] s String containing command for robot, without ending char (carriage return) + */ + void AddChecksum(string &s); + + /** + * Verify if checksum of an incoming answer from robot is valid, + * then remove checksum from incoming answer (if checksum is ok) + * @param[in,out] s String containing incoming answer from robot + * @return true is checksum is valid, false otherwise. + */ + bool VerifyChecksum(string &s); }; #endif /* __COMROBOT_H__ */ diff --git a/software/raspberry/superviseur-robot/lib/img.cpp b/software/raspberry/superviseur-robot/lib/img.cpp index 4b7ae3a..ffbd655 100644 --- a/software/raspberry/superviseur-robot/lib/img.cpp +++ b/software/raspberry/superviseur-robot/lib/img.cpp @@ -27,9 +27,13 @@ Img::Img(ImageMat imgMatrice) { } string Img::ToString() { - return "Image size: "+this->img.cols+"x"this->img.rows+" (dim="+this->img.dims+")"; + return "Image size: "+to_string(this->img.cols)+"x"+to_string(this->img.rows)+" (dim="+to_string(this->img.dims)+")"; } +string Img::ToBase64() { + return ""; +} + Img* Img::Copy() { return new Img(this->img); } @@ -100,13 +104,13 @@ Jpg Img::toJpg() { return imgJpg; } -string Img::ToBase64() { - string imgBase64; - Jpg imgJpg = toJpg(); - - /* faire la convertion Jpg vers base 64 */ - return imgBase64; -} +//string Img::ToBase64() { +// string imgBase64; +// Jpg imgJpg = toJpg(); +// +// /* faire la convertion Jpg vers base 64 */ +// return imgBase64; +//} std::list Img::search_robot(Arene monArene) { diff --git a/software/raspberry/superviseur-robot/lib/img.h b/software/raspberry/superviseur-robot/lib/img.h index 4e98ea0..dc0efe8 100644 --- a/software/raspberry/superviseur-robot/lib/img.h +++ b/software/raspberry/superviseur-robot/lib/img.h @@ -49,7 +49,7 @@ typedef struct { class Arene { public: - Arene(); + Arene() {} cv::Rect arene; bool empty(); diff --git a/software/raspberry/superviseur-robot/lib/messages.cpp b/software/raspberry/superviseur-robot/lib/messages.cpp index 8957c62..904bc2f 100644 --- a/software/raspberry/superviseur-robot/lib/messages.cpp +++ b/software/raspberry/superviseur-robot/lib/messages.cpp @@ -27,7 +27,12 @@ const string MESSAGE_ID_STRING[] = { "Empty", "Log", - "Answer", + "Answer [Acknowledge]", + "Answer [Not Acknowledge]", + "Answer [Command timeout]", + "Answer [Command unknown]", + "Answer [Command error]", + "Answer [Communication error]", "Monitor connection lost", "Open serial com", "Close serial com", @@ -42,8 +47,8 @@ const string MESSAGE_ID_STRING[] = { "Image", "Robot ping", "Robot reset", - "Robot start with wtachdog", - "Robot start without wtachdog", + "Robot start with watchdog", + "Robot start without watchdog", "Robot reload watchdog", "Robot move", "Robot turn", @@ -56,7 +61,9 @@ const string MESSAGE_ID_STRING[] = { "Robot get battery", "Robot battery level", "Robot get state", - "Robot current state" + "Robot current state", + "Robot state [Not busy]", + "Robot state [Busy]" }; /* @@ -108,7 +115,7 @@ void Message::SetID(MessageID id) { */ string Message::ToString() { if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\""; + return "Message: \"" + MESSAGE_ID_STRING[this->messageID] + "\""; else return "Invalid message"; } @@ -118,7 +125,7 @@ string Message::ToString() { * @return A message, copy of current */ Message* Message::Copy() { - Message *msg = new Message(); + Message *msg = new Message(this->messageID); return msg; } @@ -128,30 +135,12 @@ Message* Message::Copy() { * @return Current message ID */ bool Message::CheckID(MessageID id) { - if ((id != MESSAGE_EMPTY) && - (id != MESSAGE_MONITOR_LOST) && - (id != MESSAGE_ARENA_CONFIRM) && - (id != MESSAGE_ARENA_INFIRM) && - (id != MESSAGE_ASK_ARENA) && - (id != MESSAGE_CAM_CLOSE) && - (id != MESSAGE_CAM_OPEN) && - (id != MESSAGE_CLOSE_COM) && - (id != MESSAGE_COMPUTE_POSITION) && - (id != MESSAGE_OPEN_COM) && - (id != MESSAGE_ROBOT_GET_BATTERY) && - (id != MESSAGE_ROBOT_GET_STATE) && - (id != MESSAGE_ROBOT_GO_BACK) && - (id != MESSAGE_ROBOT_GO_FORWARD) && - (id != MESSAGE_ROBOT_GO_LEFT) && - (id != MESSAGE_ROBOT_GO_RIGHT) && - (id != MESSAGE_ROBOT_PING) && - (id != MESSAGE_ROBOT_POWEROFF) && - (id != MESSAGE_ROBOT_RELOAD_WD) && - (id != MESSAGE_ROBOT_RESET) && - (id != MESSAGE_ROBOT_START_WITHOUT_WD) && - (id != MESSAGE_ROBOT_START_WITH_WD) && - (id != MESSAGE_ROBOT_STOP) && - (id != MESSAGE_STOP_COMPUTE_POSITION)) { + if ((id == MESSAGE_CAM_IMAGE) || + (id == MESSAGE_CAM_POSITION) || + (id == MESSAGE_ROBOT_MOVE) || + (id == MESSAGE_ROBOT_TURN) || + (id == MESSAGE_LOG) || + (id == MESSAGE_ROBOT_BATTERY_LEVEL)) { return false; } else return true; } @@ -197,7 +186,7 @@ void MessageInt::SetID(MessageID id) { */ string MessageInt::ToString() { if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nValue: " + to_string(this->value); + return "Message: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nValue: " + to_string(this->value); else return "Invalid message"; } @@ -263,7 +252,7 @@ void MessageString::SetID(MessageID id) { */ string MessageString::ToString() { if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nString: \"" + this->s + "\""; + return "Message: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nString: \"" + this->s + "\""; else return "Invalid message"; } @@ -342,7 +331,7 @@ void MessageImg::SetImage(Img* image) { */ string MessageImg::ToString() { if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\n" + this->image->ToString(); + return "Message: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\n" + this->image->ToString(); else return "Invalid message"; } @@ -362,91 +351,7 @@ Message* MessageImg::Copy() { * @return true, if message ID is acceptable, false otherwise */ bool MessageImg::CheckID(MessageID id) { - if (id != MESSAGE_IMAGE) { - return false; - } else return true; -} - -/* class MessageAnswer*/ - -/** - * Create a new, empty answer message - */ -MessageAnswer::MessageAnswer() { - answer=ANSWER_ACK; -} - -/** - * Create a new answer message, with given ID and answer - * @param id Message ID - * @param ans Answer ID - * @throw std::runtime_error if message ID is incompatible with string data - */ -MessageAnswer::MessageAnswer(MessageID id, AnswerID ans) { - MessageAnswer::SetID(id); - MessageAnswer::SetAnswer(ans); -} - -/** - * Set message ID - * @param id Message ID - * @throw std::runtime_error if message ID is incompatible with answer message - */ -void MessageAnswer::SetID(MessageID id) { - if (CheckID(id)) - messageID = id; - else - throw std::runtime_error { - "Invalid message id for MessageAnswer" - }; -} - -/** - * Set message answer - * @param ans Answer ID - * @throw std::runtime_error if answer ID is incompatible with answer data - */ -void MessageAnswer::SetAnswer(AnswerID ans) { - if ((ans != ANSWER_ACK) && - (ans != ANSWER_NACK) && - (ans != ANSWER_LOST_ROBOT) && - (ans != ANSWER_ROBOT_CHECKSUM) && - (ans != ANSWER_ROBOT_ERROR) && - (ans != ANSWER_ROBOT_TIMEOUT) && - (ans != ANSWER_ROBOT_UNKNOWN_COMMAND)) { - this->answer = answer; - } else { - throw std::runtime_error{ - "Invalid answer for MessageAnswer"}; - } -} - -/** - * Translate content of message into a string that can be displayed - * @return A string describing message contents - */ -string MessageAnswer::ToString() { - if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nAnswer: \"" + ANSWER_ID_STRING[this->answer] + "\""; - else - return "Invalid message"; -} - -/** - * Allocate a new message and copy contents of current message - * @return A message, copy of current - */ -Message* MessageAnswer::Copy() { - return new MessageAnswer(this->messageID, this->answer); -} - -/** - * Verify if message ID is compatible with current message type - * @param id Message ID - * @return true, if message ID is acceptable, false otherwise - */ -bool MessageAnswer::CheckID(MessageID id) { - if ((id != MESSAGE_ANSWER)) { + if (id != MESSAGE_CAM_IMAGE) { return false; } else return true; } @@ -523,7 +428,7 @@ string MessageBattery::ToString() { } if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nBattery level: \"" + levelString + "\""; + return "Message: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nBattery level: \"" + levelString + "\""; else return "Invalid message"; } @@ -603,7 +508,7 @@ void MessagePosition::SetPosition(Position& pos) { */ string MessagePosition::ToString() { if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nPosition: \"" + to_string(this->pos.center.x) + ";" + to_string(this->pos.center.y) + "\""; + return "Message: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nPosition: \"" + to_string(this->pos.center.x) + ";" + to_string(this->pos.center.y) + "\""; else return "Invalid message"; } @@ -622,91 +527,7 @@ Message* MessagePosition::Copy() { * @return true, if message ID is acceptable, false otherwise */ bool MessagePosition::CheckID(MessageID id) { - if ((id != MESSAGE_POSITION)) { + if ((id != MESSAGE_CAM_POSITION)) { return false; } else return true; } - - -/* class MessageState */ - -/** - * Create a new, empty state message - */ -MessageState::MessageState() { - state = ROBOT_NOT_BUSY; -} - -/** - * Create a new string message, with given ID and string - * @param id Message ID - * @param s Message string - * @throw std::runtime_error if message ID is incompatible with string data - */ -MessageState::MessageState(MessageID id, RobotState state) { - MessageState::SetID(id); - MessageState::SetState(state); -} - -/** - * Set message ID - * @param id Message ID - * @throw std::runtime_error if message ID is incompatible with robot state - */ -void MessageState::SetID(MessageID id) { - if (CheckID(id)) - messageID = id; - else - throw std::runtime_error { - "Invalid message id for MessageState" - }; -} - -/** - * Set robot state - * @param state Robot state - */ -void MessageState::SetState(RobotState state) { - if ((state != ROBOT_NOT_BUSY) && (state != ROBOT_BUSY)) { - throw std::runtime_error{ - "Invalid state for MessageState"}; - } else { - this->state = state; - } -} - -/** - * Translate content of message into a string that can be displayed - * @return A string describing message contents - */ -string MessageState::ToString() { - string stateString; - - if (this->state == ROBOT_NOT_BUSY) stateString="Not busy"; - else if (this->state == ROBOT_BUSY) stateString="Busy"; - else stateString="Invalid state"; - - if (CheckID(this->messageID)) - return "Id: \"" + MESSAGE_ID_STRING[this->messageID] + "\"\nState: \"" + stateString + "\""; - else - return "Invalid message"; -} - -/** - * Allocate a new message and copy contents of current message - * @return A message, copy of current - */ -Message* MessageState::Copy() { - return new MessageState(this->messageID, this->state); -} - -/** - * Verify if message ID is compatible with current message type - * @param id Message ID - * @return true, if message ID is acceptable, false otherwise - */ -bool MessageState::CheckID(MessageID id) { - if ((id != MESSAGE_ROBOT_CURRENT_STATE)) { - return false; - } else return true; -} \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/lib/messages.h b/software/raspberry/superviseur-robot/lib/messages.h index d545220..60328de 100644 --- a/software/raspberry/superviseur-robot/lib/messages.h +++ b/software/raspberry/superviseur-robot/lib/messages.h @@ -33,11 +33,16 @@ typedef enum { MESSAGE_LOG, // Message containing answer (after robot command, or for monitor) - MESSAGE_ANSWER, + MESSAGE_ANSWER_ACK, + MESSAGE_ANSWER_NACK, + MESSAGE_ANSWER_ROBOT_TIMEOUT, + MESSAGE_ANSWER_ROBOT_UNKNOWN_COMMAND, + MESSAGE_ANSWER_ROBOT_ERROR, + MESSAGE_ANSWER_COM_ERROR, // messages for serial communication with robot - MESSAGE_OPEN_COM, - MESSAGE_CLOSE_COM, + MESSAGE_ROBOT_COM_OPEN, + MESSAGE_ROBOT_COM_CLOSE, // Messages specific to server MESSAGE_MONITOR_LOST, @@ -45,13 +50,13 @@ typedef enum { // Messages for camera MESSAGE_CAM_OPEN, MESSAGE_CAM_CLOSE, - MESSAGE_ASK_ARENA, - MESSAGE_ARENA_CONFIRM, - MESSAGE_ARENA_INFIRM, - MESSAGE_COMPUTE_POSITION, - MESSAGE_STOP_COMPUTE_POSITION, - MESSAGE_POSITION, - MESSAGE_IMAGE, + MESSAGE_CAM_ASK_ARENA, + MESSAGE_CAM_ARENA_CONFIRM, + MESSAGE_CAM_ARENA_INFIRM, + MESSAGE_CAM_POSITION_COMPUTE_START, + MESSAGE_CAM_POSITION_COMPUTE_STOP, + MESSAGE_CAM_POSITION, + MESSAGE_CAM_IMAGE, // Messages for robot MESSAGE_ROBOT_PING, @@ -62,27 +67,18 @@ typedef enum { MESSAGE_ROBOT_MOVE, MESSAGE_ROBOT_TURN, MESSAGE_ROBOT_GO_FORWARD, - MESSAGE_ROBOT_GO_BACK, + MESSAGE_ROBOT_GO_BACKWARD, MESSAGE_ROBOT_GO_LEFT, MESSAGE_ROBOT_GO_RIGHT, MESSAGE_ROBOT_STOP, MESSAGE_ROBOT_POWEROFF, - MESSAGE_ROBOT_GET_BATTERY, + MESSAGE_ROBOT_BATTERY_GET, MESSAGE_ROBOT_BATTERY_LEVEL, - MESSAGE_ROBOT_GET_STATE, - MESSAGE_ROBOT_CURRENT_STATE + MESSAGE_ROBOT_STATE_GET, + MESSAGE_ROBOT_STATE_NOT_BUSY, + MESSAGE_ROBOT_STATE_BUSY } MessageID; -typedef enum { - ANSWER_ACK=0, - ANSWER_NACK, - ANSWER_LOST_ROBOT, - ANSWER_ROBOT_TIMEOUT, - ANSWER_ROBOT_UNKNOWN_COMMAND, - ANSWER_ROBOT_ERROR, - ANSWER_ROBOT_CHECKSUM -} AnswerID; - typedef enum { BATTERY_UNKNOWN=-1, BATTERY_EMPTY=0, @@ -90,11 +86,6 @@ typedef enum { BATTERY_FULL } BatteryLevel; -typedef enum { - ROBOT_NOT_BUSY=0, - ROBOT_BUSY -} RobotState; - using namespace std; /** @@ -132,6 +123,15 @@ public: */ virtual Message* Copy(); + /** + * Compare message ID + * @param id Id to compare message to + * @return true if id is equal to message id, false otherwise + */ + bool CompareID(MessageID id) { + return (this->messageID == id) ? true:false; + } + /** * Get message ID * @return Current message ID @@ -563,140 +563,5 @@ protected: bool CheckID(MessageID id); }; -/** - * Message class for holding answer, based on Message class - * - * @brief Answer message class - * - */ -class MessageAnswer : public Message { -public: - /** - * Create a new, empty image message - */ - MessageAnswer(); - - /** - * Create a new image message, with given ID and boolean value - * @param id Message ID - * @param ans Answer ID - * @throw std::runtime_error if message ID is incompatible with image message - */ - MessageAnswer(MessageID id, AnswerID ans); - - /** - * Set message ID - * @param id Message ID - * @throw std::runtime_error if message ID is incompatible withimage message - */ - void SetID(MessageID id); - - /** - * Get message image - * @return Pointer to image - */ - AnswerID GetAnswer() { - return answer; - } - - /** - * Set message answer - * @param ans Answer ID - */ - void SetAnswer(AnswerID ans); - - /** - * Translate content of message into a string that can be displayed - * @return A string describing message contents - */ - string ToString(); - - /** - * Allocate a new message and copy contents of current message - * @return A message, copy of current - */ - Message* Copy(); - -protected: - /** - * Message answer - */ - AnswerID answer; - - /** - * Verify if message ID is compatible with current message type - * @param id Message ID - * @return true, if message ID is acceptable, false otherwise - */ - bool CheckID(MessageID id); -}; - -/** - * Message class for holding robot state, based on Message class - * - * @brief Answer message class - * - */ -class MessageState: public Message { -public: - /** - * Create a new, empty image message - */ - MessageState(); - - /** - * Create a new image message, with given ID and boolean value - * @param id Message ID - * @param image Pointer to image - * @throw std::runtime_error if message ID is incompatible with image message - */ - MessageState(MessageID id, RobotState state); - - /** - * Set message ID - * @param id Message ID - * @throw std::runtime_error if message ID is incompatible withimage message - */ - void SetID(MessageID id); - - /** - * Get message image - * @return Pointer to image - */ - RobotState GetState() { - return state; - } - - /** - * Set message image - * @param image Pointer to image object - */ - void SetState(RobotState state); - - /** - * Translate content of message into a string that can be displayed - * @return A string describing message contents - */ - string ToString(); - - /** - * Allocate a new message and copy contents of current message - * @return A message, copy of current - */ - Message* Copy(); - -protected: - /** - * Robot state - */ - RobotState state; - - /** - * Verify if message ID is compatible with current message type - * @param id Message ID - * @return true, if message ID is acceptable, false otherwise - */ - bool CheckID(MessageID id); -}; #endif /* __MESSAGES_H__ */ diff --git a/software/raspberry/superviseur-robot/main.cpp b/software/raspberry/superviseur-robot/main.cpp index 7988a7a..de9d762 100644 --- a/software/raspberry/superviseur-robot/main.cpp +++ b/software/raspberry/superviseur-robot/main.cpp @@ -15,196 +15,39 @@ * along with this program. If not, see . */ -/** - * \file main.cpp - * \author PE.Hladik - * \version 1.0 - * \date 06/06/2017 - * \brief main program - */ - -#include -#include +#include #include #include -#include -#include -#include -#include -#include +#ifdef __WITH_PTHREAD__ +#include "tasks_pthread.h" +#else #include "tasks.h" - -// Déclaration des taches -RT_TASK th_server; -RT_TASK th_sendToMon; -RT_TASK th_receiveFromMon; -RT_TASK th_openComRobot; -RT_TASK th_startRobot; -RT_TASK th_move; - -// Déclaration des priorités des taches -int PRIORITY_TSERVER = 30; -int PRIORITY_TOPENCOMROBOT = 20; -int PRIORITY_TMOVE = 10; -int PRIORITY_TSENDTOMON = 25; -int PRIORITY_TRECEIVEFROMMON = 22; -int PRIORITY_TSTARTROBOT = 20; - -RT_MUTEX mutex_robotStarted; -RT_MUTEX mutex_move; - -// Déclaration des sémaphores -RT_SEM sem_barrier; -RT_SEM sem_openComRobot; -RT_SEM sem_serverOk; -RT_SEM sem_startRobot; - -// Déclaration des files de message -RT_QUEUE q_messageToMon; - -int MSG_QUEUE_SIZE = 10; - -// Déclaration des ressources partagées -int etatCommMoniteur = 1; -int robotStarted = 0; -char robotMove = DMB_STOP_MOVE; - -/** - * \fn void initStruct(void) - * \brief Initialisation des structures de l'application (tâches, mutex, - * semaphore, etc.) - */ -void initStruct(void); - -/** - * \fn void startTasks(void) - * \brief Démarrage des tâches - */ -void startTasks(void); - -/** - * \fn void deleteTasks(void) - * \brief Arrêt des tâches - */ -void deleteTasks(void); +#endif // __WITH_PTHREAD__ int main(int argc, char **argv) { - int err; + Tasks tasks; + //Lock the memory to avoid memory swapping for this program mlockall(MCL_CURRENT | MCL_FUTURE); - printf("#################################\n"); - printf("# DE STIJL PROJECT #\n"); - printf("#################################\n"); + cout<<"#################################"< - ./lib/camera.cpp + /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp ./lib/image.cpp - ./lib/img.cpp + /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/img.cpp ./main.cpp ./lib/message.cpp ./lib/messages.cpp @@ -93,16 +93,12 @@ - - - - @@ -131,6 +127,11 @@ + + + + @@ -178,8 +184,6 @@ - - @@ -188,8 +192,6 @@ - - @@ -218,6 +220,11 @@ + + + + @@ -282,8 +294,6 @@ - - @@ -292,8 +302,6 @@ - - @@ -322,6 +330,11 @@ + + + + @@ -366,7 +384,7 @@ ./ ./lib - -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables + -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -Wno-pmf-conversions _WITH_TRACE_ __FOR_PC__ @@ -382,8 +400,6 @@ - - @@ -392,11 +408,9 @@ - - - + @@ -404,15 +418,15 @@ - + - + - + @@ -420,6 +434,11 @@ + + + + diff --git a/software/raspberry/superviseur-robot/nbproject/private/configurations.xml b/software/raspberry/superviseur-robot/nbproject/private/configurations.xml index b55dcb1..8d4ae2f 100644 --- a/software/raspberry/superviseur-robot/nbproject/private/configurations.xml +++ b/software/raspberry/superviseur-robot/nbproject/private/configurations.xml @@ -116,6 +116,8 @@ + + diff --git a/software/raspberry/superviseur-robot/nbproject/private/private.xml b/software/raspberry/superviseur-robot/nbproject/private/private.xml index e64b33b..3f20efa 100644 --- a/software/raspberry/superviseur-robot/nbproject/private/private.xml +++ b/software/raspberry/superviseur-robot/nbproject/private/private.xml @@ -7,25 +7,15 @@ - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/monitor.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/img.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/img.cpp - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/robot.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks_pthread.cpp - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/image.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/server.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks_pthread.h - file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/message.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.h file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/main.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.cpp + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks_pthread.cpp diff --git a/software/raspberry/superviseur-robot/tasks.cpp b/software/raspberry/superviseur-robot/tasks.cpp index da732f2..43f9fea 100644 --- a/software/raspberry/superviseur-robot/tasks.cpp +++ b/software/raspberry/superviseur-robot/tasks.cpp @@ -15,16 +15,18 @@ * along with this program. If not, see . */ -/** - * \file functions.h - * \author PE.Hladik - * \version 1.0 - * \date 06/06/2017 - * \brief Miscellaneous functions used for destijl project. - */ - #include "tasks.h" +#ifndef __WITH_PTHREAD__ + +// Déclaration des priorités des taches +#define PRIORITY_TSERVER 30 +#define PRIORITY_TOPENCOMROBOT 20 +#define PRIORITY_TMOVE 10 +#define PRIORITY_TSENDTOMON 25 +#define PRIORITY_TRECEIVEFROMMON 22 +#define PRIORITY_TSTARTROBOT 20 + char mode_start; void write_in_queue(RT_QUEUE *, MessageToMon); @@ -258,4 +260,6 @@ void write_in_queue(RT_QUEUE *queue, MessageToMon msg) { buff = rt_queue_alloc(&q_messageToMon, sizeof (MessageToMon)); memcpy(buff, &msg, sizeof (MessageToMon)); rt_queue_send(&q_messageToMon, buff, sizeof (MessageToMon), Q_NORMAL); -} \ No newline at end of file +} + +#endif // __WITH_PTHREAD__ \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/tasks.h b/software/raspberry/superviseur-robot/tasks.h index b4127b8..119fc7f 100644 --- a/software/raspberry/superviseur-robot/tasks.h +++ b/software/raspberry/superviseur-robot/tasks.h @@ -15,17 +15,10 @@ * along with this program. If not, see . */ -/** - * \file functions.h - * \author PE.Hladik - * \version 1.0 - * \date 06/06/2017 - * \brief Miscellaneous functions used for destijl project. - */ - #ifndef __TASKS_H__ #define __TASKS_H__ +#ifndef __WITH_PTHREAD__ #include #include #include @@ -37,71 +30,107 @@ #include #include -#include "monitor.h" -#include "robot.h" -#include "image.h" -#include "message.h" -#include "server.h" +//#include "monitor.h" +//#include "robot.h" +//#include "image.h" +//#include "message.h" +//#include "server.h" -extern RT_TASK th_server; -extern RT_TASK th_sendToMon; -extern RT_TASK th_receiveFromMon; -extern RT_TASK th_openComRobot; -extern RT_TASK th_startRobot; -extern RT_TASK th_move; +#include "messages.h" +#include "commonitor.h" +#include "comrobot.h" -extern RT_MUTEX mutex_robotStarted; -extern RT_MUTEX mutex_move; +using namespace std; -extern RT_SEM sem_barrier; -extern RT_SEM sem_openComRobot; -extern RT_SEM sem_serverOk; -extern RT_SEM sem_startRobot; +class Tasks { +public: + /** + * @brief Initialisation des structures de l'application (tâches, mutex, + * semaphore, etc.) + */ + void Init(); -extern RT_QUEUE q_messageToMon; + /** + * @brief Démarrage des tâches + */ + void Run(); -extern int etatCommMoniteur; -extern int robotStarted; -extern char robotMove; + /** + * @brief Arrêt des tâches + */ + void Stop(); + + /** + */ + void Join() { + rt_sem_broadcast(&sem_barrier); + pause(); + } + + /** + */ + bool AcceptClient() { + return false; + } + +private: + ComMonitor monitor; + ComRobot robot; + + RT_TASK th_server; + RT_TASK th_sendToMon; + RT_TASK th_receiveFromMon; + RT_TASK th_openComRobot; + RT_TASK th_startRobot; + RT_TASK th_move; -extern int MSG_QUEUE_SIZE; + RT_MUTEX mutex_robotStarted; + RT_MUTEX mutex_move; -extern int PRIORITY_TSERVER; -extern int PRIORITY_TOPENCOMROBOT; -extern int PRIORITY_TMOVE; -extern int PRIORITY_TSENDTOMON; -extern int PRIORITY_TRECEIVEFROMMON; -extern int PRIORITY_TSTARTROBOT; + RT_SEM sem_barrier; + RT_SEM sem_openComRobot; + RT_SEM sem_serverOk; + RT_SEM sem_startRobot; -/** - * \brief Thread handling server communication. - */ -void f_server(void *arg); + RT_QUEUE q_messageToMon; -/** - * \brief Thread handling communication to monitor. - */ -void f_sendToMon(void *arg); + int etatCommMoniteur; + int robotStarted; + char robotMove; -/** - * \brief Thread handling communication from monitor. - */ -void f_receiveFromMon(void *arg); + int MSG_QUEUE_SIZE; -/** - * \brief Thread handling opening of robot communication. - */ -void f_openComRobot(void * arg); + /** + * \brief Thread handling server communication. + */ + void f_server(void *arg); -/** - * \brief Thread handling robot mouvements. - */ -void f_move(void *arg); + /** + * \brief Thread handling communication to monitor. + */ + void f_sendToMon(void *arg); -/** - * \brief Thread handling robot activation. - */ -void f_startRobot(void *arg); + /** + * \brief Thread handling communication from monitor. + */ + void f_receiveFromMon(void *arg); -#endif /* FUNCTIONS_H */ + /** + * \brief Thread handling opening of robot communication. + */ + void f_openComRobot(void * arg); + + /** + * \brief Thread handling robot mouvements. + */ + void f_move(void *arg); + + /** + * \brief Thread handling robot activation. + */ + void f_startRobot(void *arg); +}; + +#endif // __WITH_PTHREAD__ +#endif // __TASKS_H__ diff --git a/software/raspberry/superviseur-robot/tasks_pthread.cpp b/software/raspberry/superviseur-robot/tasks_pthread.cpp index 6e00725..5cb92d8 100644 --- a/software/raspberry/superviseur-robot/tasks_pthread.cpp +++ b/software/raspberry/superviseur-robot/tasks_pthread.cpp @@ -15,249 +15,337 @@ * along with this program. If not, see . */ -/** - * \file functions.h - * \author PE.Hladik - * \version 1.0 - * \date 06/06/2017 - * \brief Miscellaneous functions used for destijl project. - */ - #include "tasks_pthread.h" +#include #ifdef __WITH_PTHREAD__ -char mode_start; -void write_in_queue(RT_QUEUE *, MessageToMon); +// Déclaration des priorités des taches +#define PRIORITY_TSERVER 30 +#define PRIORITY_TOPENCOMROBOT 20 +#define PRIORITY_TMOVE 10 +#define PRIORITY_TSENDTOMON 25 +#define PRIORITY_TRECEIVEFROMMON 22 +#define PRIORITY_TSTARTROBOT 20 -void f_server(void *arg) { +/* + * Some remarks: + * 1- This program is mostly a template. It shows you how to create tasks, semaphore + * message queues, mutex ... and how to use them + * + * 2- semDumber is, as name say, useless. Its goal is only to show you how to use semaphore + * + * 3- Data flow is probably not optimal + * + * 4- Take into account that ComRobot::Write will block your task when serial buffer is full, + * time for internal buffer to flush + * + * 5- Same behavior existe for ComMonitor::Write ! + * + * 6- When you want to write something in terminal, use cout and terminate with endl and flush + * + * 7- Good luck ! + */ + +void Tasks::Init() { + int status; + + /* Open com port with STM32 */ + cout << "Open serial com ("; + status = robot.Open("/dev/ttyUSB1"); + cout << status; + cout << ")" << endl; + + if (status >= 0) { + // Open server + + status = monitor.Open(SERVER_PORT); + cout << "Open server on port " << SERVER_PORT << " (" << status << ")" << endl; + + if (status < 0) throw std::runtime_error { + "Unable to start server on port " + std::to_string(SERVER_PORT) + }; + } else + throw std::runtime_error { + "Unable to open serial port /dev/ttyS0 " + }; +} + +void Tasks::Run() { + Message *msgRcv; + Message *msgSend; + int counter = 3; + + // threadServer=new thread((void (*)(void*)) &Tasks::ServerTask,this); + // threadSendToMon=new thread((void (*)(void*)) &Tasks::SendToMonTask,this); + // threadTimer=new thread((void (*)(void*)) &Tasks::TimerTask,this); + + msgSend = ComRobot::Ping(); + cout << "Send => " << msgSend->ToString() << endl << flush; + msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3); + cout << "Rcv <= " << msgRcv->ToString() << endl << flush; + + delete(msgRcv); + + msgSend = ComRobot::StartWithoutWD(); + cout << "Send => " << msgSend->ToString() << endl << flush; + msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3); + cout << "Rcv <= " << msgRcv->ToString() << endl << flush; + + delete(msgRcv); + + msgSend = ComRobot::Move(1000); + cout << "Send => " << msgSend->ToString() << endl << flush; + msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3); + cout << "Rcv <= " << msgRcv->ToString() << endl << flush; + + delete(msgRcv); + + msgSend = ComRobot::GetBattery(); + cout << "Send => " << msgSend->ToString() << endl << flush; + msgRcv = robot.SendCommand(msgSend, MESSAGE_ROBOT_BATTERY_LEVEL, 3); + cout << "Rcv <= " << msgRcv->ToString() << endl << flush; + + delete(msgRcv); +} + +void Tasks::Stop() { + monitor.Close(); + robot.Close(); +} + +void Tasks::ServerTask(void *arg) { int err; - /* INIT */ - RT_TASK_INFO info; - rt_task_inquire(NULL, &info); - printf("Init %s\n", info.name); - rt_sem_p(&sem_barrier, TM_INFINITE); - - err=openServer(DEFAULT_SERVER_PORT); - - if (err < 0) { - printf("Failed to start server: %s\n", strerror(-err)); - exit(EXIT_FAILURE); - } else { -#ifdef _WITH_TRACE_ - printf("%s: server started\n", info.name); -#endif - //Waiting for a client to connect - err=acceptClient(); + cout << "Start " << __PRETTY_FUNCTION__ <= 0) { -#ifdef _WITH_TRACE_ - printf("%s : message {%s,%s} in queue\n", info.name, msg.header, (char*)msg.data); -#endif - - send_message_to_monitor(msg.header, msg.data); - free_msgToMon_data(&msg); - rt_queue_free(&q_messageToMon, &msg); - } else { - printf("Error msg queue write: %s\n", strerror(-err)); + //std::this_thread::sleep_for(std::chrono::seconds ) + //sleep(1); + if (nanosleep(&tim, &tim2) < 0) { + printf("Nano sleep system call failed \n"); + return; } + + mutexTimer.unlock(); } } -void f_receiveFromMon(void *arg) { - MessageFromMon msg; - int err; - - /* INIT */ - RT_TASK_INFO info; - rt_task_inquire(NULL, &info); - printf("Init %s\n", info.name); - rt_sem_p(&sem_barrier, TM_INFINITE); - -#ifdef _WITH_TRACE_ - printf("%s : waiting for sem_serverOk\n", info.name); -#endif - rt_sem_p(&sem_serverOk, TM_INFINITE); - do { -#ifdef _WITH_TRACE_ - printf("%s : waiting for a message from monitor\n", info.name); -#endif - err = receive_message_from_monitor(msg.header, msg.data); -#ifdef _WITH_TRACE_ - printf("%s: msg {header:%s,data=%s} received from UI\n", info.name, msg.header, msg.data); -#endif - if (strcmp(msg.header, HEADER_MTS_COM_DMB) == 0) { - if (msg.data[0] == OPEN_COM_DMB) { // Open communication supervisor-robot -#ifdef _WITH_TRACE_ - printf("%s: message open Xbee communication\n", info.name); -#endif - rt_sem_v(&sem_openComRobot); - } - } else if (strcmp(msg.header, HEADER_MTS_DMB_ORDER) == 0) { - if (msg.data[0] == DMB_START_WITHOUT_WD) { // Start robot -#ifdef _WITH_TRACE_ - printf("%s: message start robot\n", info.name); -#endif - rt_sem_v(&sem_startRobot); - - } else if ((msg.data[0] == DMB_GO_BACK) - || (msg.data[0] == DMB_GO_FORWARD) - || (msg.data[0] == DMB_GO_LEFT) - || (msg.data[0] == DMB_GO_RIGHT) - || (msg.data[0] == DMB_STOP_MOVE)) { - - rt_mutex_acquire(&mutex_move, TM_INFINITE); - robotMove = msg.data[0]; - rt_mutex_release(&mutex_move); -#ifdef _WITH_TRACE_ - printf("%s: message update movement with %c\n", info.name, robotMove); -#endif - - } - } - } while (err > 0); - -} - -void f_openComRobot(void * arg) { - int err; - - /* INIT */ - RT_TASK_INFO info; - rt_task_inquire(NULL, &info); - printf("Init %s\n", info.name); - rt_sem_p(&sem_barrier, TM_INFINITE); - +void Tasks::SendToMonTask(void* arg) { + + cout << "Start " << __PRETTY_FUNCTION__ < open communication robot\n", info.name); -#endif - err = open_communication_robot(); - if (err == 0) { -#ifdef _WITH_TRACE_ - printf("%s : the communication is opened\n", info.name); -#endif - MessageToMon msg; - set_msgToMon_header(&msg, (char*)HEADER_STM_ACK); - write_in_queue(&q_messageToMon, msg); - } else { - MessageToMon msg; - set_msgToMon_header(&msg, (char*)HEADER_STM_NO_ACK); - write_in_queue(&q_messageToMon, msg); - } + } } -void f_startRobot(void * arg) { - int err; +//void Tasks::f_sendToMon(void * arg) { +// int err; +// MessageToMon msg; +// +// /* INIT */ +// RT_TASK_INFO info; +// rt_task_inquire(NULL, &info); +// printf("Init %s\n", info.name); +// rt_sem_p(&sem_barrier, TM_INFINITE); +// +//#ifdef _WITH_TRACE_ +// printf("%s : waiting for sem_serverOk\n", info.name); +//#endif +// rt_sem_p(&sem_serverOk, TM_INFINITE); +// while (1) { +// +//#ifdef _WITH_TRACE_ +// printf("%s : waiting for a message in queue\n", info.name); +//#endif +// if (rt_queue_read(&q_messageToMon, &msg, sizeof (MessageToRobot), TM_INFINITE) >= 0) { +//#ifdef _WITH_TRACE_ +// printf("%s : message {%s,%s} in queue\n", info.name, msg.header, (char*)msg.data); +//#endif +// +// send_message_to_monitor(msg.header, msg.data); +// free_msgToMon_data(&msg); +// rt_queue_free(&q_messageToMon, &msg); +// } else { +// printf("Error msg queue write: %s\n", strerror(-err)); +// } +// } +//} +// +//void Tasks::f_receiveFromMon(void *arg) { +// MessageFromMon msg; +// int err; +// +// /* INIT */ +// RT_TASK_INFO info; +// rt_task_inquire(NULL, &info); +// printf("Init %s\n", info.name); +// rt_sem_p(&sem_barrier, TM_INFINITE); +// +//#ifdef _WITH_TRACE_ +// printf("%s : waiting for sem_serverOk\n", info.name); +//#endif +// rt_sem_p(&sem_serverOk, TM_INFINITE); +// do { +//#ifdef _WITH_TRACE_ +// printf("%s : waiting for a message from monitor\n", info.name); +//#endif +// err = receive_message_from_monitor(msg.header, msg.data); +//#ifdef _WITH_TRACE_ +// printf("%s: msg {header:%s,data=%s} received from UI\n", info.name, msg.header, msg.data); +//#endif +// if (strcmp(msg.header, HEADER_MTS_COM_DMB) == 0) { +// if (msg.data[0] == OPEN_COM_DMB) { // Open communication supervisor-robot +//#ifdef _WITH_TRACE_ +// printf("%s: message open Xbee communication\n", info.name); +//#endif +// rt_sem_v(&sem_openComRobot); +// } +// } else if (strcmp(msg.header, HEADER_MTS_DMB_ORDER) == 0) { +// if (msg.data[0] == DMB_START_WITHOUT_WD) { // Start robot +//#ifdef _WITH_TRACE_ +// printf("%s: message start robot\n", info.name); +//#endif +// rt_sem_v(&sem_startRobot); +// +// } else if ((msg.data[0] == DMB_GO_BACK) +// || (msg.data[0] == DMB_GO_FORWARD) +// || (msg.data[0] == DMB_GO_LEFT) +// || (msg.data[0] == DMB_GO_RIGHT) +// || (msg.data[0] == DMB_STOP_MOVE)) { +// +// rt_mutex_acquire(&mutex_move, TM_INFINITE); +// robotMove = msg.data[0]; +// rt_mutex_release(&mutex_move); +//#ifdef _WITH_TRACE_ +// printf("%s: message update movement with %c\n", info.name, robotMove); +//#endif +// +// } +// } +// } while (err > 0); +// +//} +// +//void Tasks::f_openComRobot(void * arg) { +// int err; +// +// /* INIT */ +// RT_TASK_INFO info; +// rt_task_inquire(NULL, &info); +// printf("Init %s\n", info.name); +// rt_sem_p(&sem_barrier, TM_INFINITE); +// +// while (1) { +//#ifdef _WITH_TRACE_ +// printf("%s : Wait sem_openComRobot\n", info.name); +//#endif +// rt_sem_p(&sem_openComRobot, TM_INFINITE); +//#ifdef _WITH_TRACE_ +// printf("%s : sem_openComRobot arrived => open communication robot\n", info.name); +//#endif +// err = open_communication_robot(); +// if (err == 0) { +//#ifdef _WITH_TRACE_ +// printf("%s : the communication is opened\n", info.name); +//#endif +// MessageToMon msg; +// set_msgToMon_header(&msg, (char*)HEADER_STM_ACK); +// write_in_queue(&q_messageToMon, msg); +// } else { +// MessageToMon msg; +// set_msgToMon_header(&msg, (char*)HEADER_STM_NO_ACK); +// write_in_queue(&q_messageToMon, msg); +// } +// } +//} +// +//void Tasks::f_startRobot(void * arg) { +// int err; +// +// /* INIT */ +// RT_TASK_INFO info; +// rt_task_inquire(NULL, &info); +// printf("Init %s\n", info.name); +// rt_sem_p(&sem_barrier, TM_INFINITE); +// +// while (1) { +//#ifdef _WITH_TRACE_ +// printf("%s : Wait sem_startRobot\n", info.name); +//#endif +// rt_sem_p(&sem_startRobot, TM_INFINITE); +//#ifdef _WITH_TRACE_ +// printf("%s : sem_startRobot arrived => Start robot\n", info.name); +//#endif +// err = send_command_to_robot(DMB_START_WITHOUT_WD); +// if (err == 0) { +//#ifdef _WITH_TRACE_ +// printf("%s : the robot is started\n", info.name); +//#endif +// rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); +// robotStarted = 1; +// rt_mutex_release(&mutex_robotStarted); +// MessageToMon msg; +// set_msgToMon_header(&msg, (char*)HEADER_STM_ACK); +// write_in_queue(&q_messageToMon, msg); +// } else { +// MessageToMon msg; +// set_msgToMon_header(&msg, (char*)HEADER_STM_NO_ACK); +// write_in_queue(&q_messageToMon, msg); +// } +// } +//} +// +//void Tasks::f_move(void *arg) { +// /* INIT */ +// RT_TASK_INFO info; +// rt_task_inquire(NULL, &info); +// printf("Init %s\n", info.name); +// rt_sem_p(&sem_barrier, TM_INFINITE); +// +// /* PERIODIC START */ +//#ifdef _WITH_PERIODIC_TRACE_ +// printf("%s: start period\n", info.name); +//#endif +// rt_task_set_periodic(NULL, TM_NOW, 100000000); +// while (1) { +//#ifdef _WITH_PERIODIC_TRACE_ +// printf("%s: Wait period \n", info.name); +//#endif +// rt_task_wait_period(NULL); +//#ifdef _WITH_PERIODIC_TRACE_ +// printf("%s: Periodic activation\n", info.name); +// printf("%s: move equals %c\n", info.name, robotMove); +//#endif +// rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); +// if (robotStarted) { +// rt_mutex_acquire(&mutex_move, TM_INFINITE); +// send_command_to_robot(robotMove); +// rt_mutex_release(&mutex_move); +//#ifdef _WITH_TRACE_ +// printf("%s: the movement %c was sent\n", info.name, robotMove); +//#endif +// } +// rt_mutex_release(&mutex_robotStarted); +// } +//} +// +//void write_in_queue(RT_QUEUE *queue, MessageToMon msg) { +// void *buff; +// buff = rt_queue_alloc(&q_messageToMon, sizeof (MessageToMon)); +// memcpy(buff, &msg, sizeof (MessageToMon)); +// rt_queue_send(&q_messageToMon, buff, sizeof (MessageToMon), Q_NORMAL); +//} - /* INIT */ - RT_TASK_INFO info; - rt_task_inquire(NULL, &info); - printf("Init %s\n", info.name); - rt_sem_p(&sem_barrier, TM_INFINITE); - - while (1) { -#ifdef _WITH_TRACE_ - printf("%s : Wait sem_startRobot\n", info.name); -#endif - rt_sem_p(&sem_startRobot, TM_INFINITE); -#ifdef _WITH_TRACE_ - printf("%s : sem_startRobot arrived => Start robot\n", info.name); -#endif - err = send_command_to_robot(DMB_START_WITHOUT_WD); - if (err == 0) { -#ifdef _WITH_TRACE_ - printf("%s : the robot is started\n", info.name); -#endif - rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); - robotStarted = 1; - rt_mutex_release(&mutex_robotStarted); - MessageToMon msg; - set_msgToMon_header(&msg, (char*)HEADER_STM_ACK); - write_in_queue(&q_messageToMon, msg); - } else { - MessageToMon msg; - set_msgToMon_header(&msg, (char*)HEADER_STM_NO_ACK); - write_in_queue(&q_messageToMon, msg); - } - } -} - -void f_move(void *arg) { - /* INIT */ - RT_TASK_INFO info; - rt_task_inquire(NULL, &info); - printf("Init %s\n", info.name); - rt_sem_p(&sem_barrier, TM_INFINITE); - - /* PERIODIC START */ -#ifdef _WITH_PERIODIC_TRACE_ - printf("%s: start period\n", info.name); -#endif - rt_task_set_periodic(NULL, TM_NOW, 100000000); - while (1) { -#ifdef _WITH_PERIODIC_TRACE_ - printf("%s: Wait period \n", info.name); -#endif - rt_task_wait_period(NULL); -#ifdef _WITH_PERIODIC_TRACE_ - printf("%s: Periodic activation\n", info.name); - printf("%s: move equals %c\n", info.name, robotMove); -#endif - rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); - if (robotStarted) { - rt_mutex_acquire(&mutex_move, TM_INFINITE); - send_command_to_robot(robotMove); - rt_mutex_release(&mutex_move); -#ifdef _WITH_TRACE_ - printf("%s: the movement %c was sent\n", info.name, robotMove); -#endif - } - rt_mutex_release(&mutex_robotStarted); - } -} - -void write_in_queue(RT_QUEUE *queue, MessageToMon msg) { - void *buff; - buff = rt_queue_alloc(&q_messageToMon, sizeof (MessageToMon)); - memcpy(buff, &msg, sizeof (MessageToMon)); - rt_queue_send(&q_messageToMon, buff, sizeof (MessageToMon), Q_NORMAL); -} #endif //__WITH_PTHREAD__ \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/tasks_pthread.h b/software/raspberry/superviseur-robot/tasks_pthread.h index 71dd7b4..b79c139 100644 --- a/software/raspberry/superviseur-robot/tasks_pthread.h +++ b/software/raspberry/superviseur-robot/tasks_pthread.h @@ -15,14 +15,6 @@ * along with this program. If not, see . */ -/** - * \file functions.h - * \author PE.Hladik - * \version 1.0 - * \date 06/06/2017 - * \brief Miscellaneous functions used for destijl project. - */ - #ifndef __TASKS_H__ #define __TASKS_H__ @@ -31,73 +23,112 @@ #include #include -#include +//#include "monitor.h" +//#include "robot.h" +//#include "image.h" +//#include "message.h" +//#include "server.h" -#include "monitor.h" -#include "robot.h" -#include "image.h" -#include "message.h" -#include "server.h" +#include "camera.h" +#include "img.h" -extern RT_TASK th_server; -extern RT_TASK th_sendToMon; -extern RT_TASK th_receiveFromMon; -extern RT_TASK th_openComRobot; -extern RT_TASK th_startRobot; -extern RT_TASK th_move; +#include "messages.h" +#include "commonitor.h" +#include "comrobot.h" -extern RT_MUTEX mutex_robotStarted; -extern RT_MUTEX mutex_move; - -extern RT_SEM sem_barrier; -extern RT_SEM sem_openComRobot; -extern RT_SEM sem_serverOk; -extern RT_SEM sem_startRobot; - -extern RT_QUEUE q_messageToMon; - -extern int etatCommMoniteur; -extern int robotStarted; -extern char robotMove; - -extern int MSG_QUEUE_SIZE; - -extern int PRIORITY_TSERVER; -extern int PRIORITY_TOPENCOMROBOT; -extern int PRIORITY_TMOVE; -extern int PRIORITY_TSENDTOMON; -extern int PRIORITY_TRECEIVEFROMMON; -extern int PRIORITY_TSTARTROBOT; +#include +#include +#include +class Tasks { +public: /** - * \brief Thread handling server communication. - */ -void f_server(void *arg); + * @brief Initialisation des structures de l'application (tâches, mutex, + * semaphore, etc.) + */ + void Init(); -/** - * \brief Thread handling communication to monitor. - */ -void f_sendToMon(void *arg); + /** + * @brief Démarrage des tâches + */ + void Run(); -/** - * \brief Thread handling communication from monitor. - */ -void f_receiveFromMon(void *arg); + /** + * @brief Arrêt des tâches + */ + void Stop(); + + /** + */ + void Join() { + threadServer->join(); + threadTimer->join(); + threadSendToMon->join(); + } + + /** + */ + bool AcceptClient() { + return monitor.AcceptClient(); + } + + /** + * @brief Thread handling server communication. + */ + void ServerTask(void *arg); -/** - * \brief Thread handling opening of robot communication. - */ -void f_openComRobot(void * arg); + /** + * @brief Thread handling server communication. + */ + void TimerTask(void *arg); + + /** + * @brief Thread handling communication to monitor. + */ + void SendToMonTask(void *arg); +private: + ComMonitor monitor; + ComRobot robot; + + thread *threadServer; + thread *threadSendToMon; + thread *threadTimer; +// thread *threadReceiveFromMon; +// thread *threadOpenComRobot; +// thread *threadStartRobot; +// thread *threadMove; +// thread *threadTimer; + + mutex mutexTimer; +// mutex mutexRobotStarted; +// mutex mutexMove; +// mutex semBarrier; +// mutex semOpenComRobot; +// mutex semServerOk; +// mutex semStartRobot; -/** - * \brief Thread handling robot mouvements. - */ -void f_move(void *arg); - -/** - * \brief Thread handling robot activation. - */ -void f_startRobot(void *arg); + +// +// /** +// * @brief Thread handling communication from monitor. +// */ +// void ReceiveFromMonTask(void *arg); +// +// /** +// * @brief Thread handling opening of robot communication. +// */ +// void OpenComRobotTask(void * arg); +// +// /** +// * @brief Thread handling robot mouvements. +// */ +// void MoveTask(void *arg); +// +// /** +// * @brief Thread handling robot activation. +// */ +// void StartRobotTask(void *arg); +}; #endif // __WITH_PTHREAD__ #endif /* __TASKS_H__ */ diff --git a/software/robot/src/cmdManager.c b/software/robot/src/cmdManager.c index 1e9c9d5..54e9732 100644 --- a/software/robot/src/cmdManager.c +++ b/software/robot/src/cmdManager.c @@ -340,7 +340,7 @@ void cmdStartWithoutWatchdogAction(void) { * Le type de commande à envoyer est :"M=val\r". Ou val * peut être positif ou negatif. * - * @param None + * @param NSTART_WITH_WDone * @retval None */ void cmdMoveAction(void) { From 8bf6c73dbb4f43b64f27fdad7eff4145a91ef921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20DI=20MERCURIO?= Date: Fri, 4 Jan 2019 16:55:48 +0100 Subject: [PATCH 04/10] images are now sent using base64. 40fps on localhost, test to be done on raspberry --- .vscode/c_cpp_properties.json | 16 - .vscode/tasks.json | 16 - software/monitor/monitor/Client.cs | 168 +++- software/monitor/monitor/CommandManager.cs | 8 +- .../monitor/monitor/DestijlCommandManager.cs | 305 +++++-- software/monitor/monitor/MonitorUI.cs | 195 ++-- software/monitor/monitor/monitor | Bin 104960 -> 107520 bytes software/raspberry/superviseur-robot/.dep.inc | 5 - .../raspberry/superviseur-robot/.idea/.name | 1 - .../.idea/codeStyles/Project.xml | 29 - .../superviseur-robot/.idea/misc.xml | 7 - .../superviseur-robot/.idea/modules.xml | 8 - .../.idea/superviseur-robot.iml | 2 - .../raspberry/superviseur-robot/.idea/vcs.xml | 6 - .../superviseur-robot/.idea/workspace.xml | 864 ------------------ .../GNU-Linux/superviseur-robot | Bin 956776 -> 1101728 bytes .../superviseur-robot/lib/base64/.gitignore | 2 + .../superviseur-robot/lib/base64/LICENSE | 19 + .../superviseur-robot/lib/base64/README.md | 7 + .../superviseur-robot/lib/base64/base64.cpp | 122 +++ .../superviseur-robot/lib/base64/base64.h | 14 + .../lib/base64/compile-and-run-test | 2 + .../superviseur-robot/lib/base64/test.cpp | 56 ++ .../superviseur-robot/lib/camera.cpp | 46 +- .../raspberry/superviseur-robot/lib/camera.h | 18 +- .../superviseur-robot/lib/commonitor.cpp | 48 +- .../superviseur-robot/lib/commonitor.h | 6 +- .../raspberry/superviseur-robot/lib/img.cpp | 64 +- .../raspberry/superviseur-robot/lib/img.h | 31 +- .../superviseur-robot/lib/messages.cpp | 6 +- .../superviseur-robot/lib/messages.h | 10 +- software/raspberry/superviseur-robot/main.cpp | 7 +- .../nbproject/Makefile-Debug.mk | 6 + .../nbproject/Makefile-Debug__Pthread_.mk | 6 + .../nbproject/Makefile-Debug__RPI_.mk | 6 + .../nbproject/Makefile-Release.mk | 6 + .../nbproject/configurations.xml | 42 + .../nbproject/private/private.xml | 3 +- .../superviseur-robot/tasks_pthread.cpp | 150 ++- .../superviseur-robot/tasks_pthread.h | 3 + 40 files changed, 1021 insertions(+), 1289 deletions(-) delete mode 100644 .vscode/c_cpp_properties.json delete mode 100644 .vscode/tasks.json delete mode 100644 software/raspberry/superviseur-robot/.dep.inc delete mode 100644 software/raspberry/superviseur-robot/.idea/.name delete mode 100644 software/raspberry/superviseur-robot/.idea/codeStyles/Project.xml delete mode 100644 software/raspberry/superviseur-robot/.idea/misc.xml delete mode 100644 software/raspberry/superviseur-robot/.idea/modules.xml delete mode 100644 software/raspberry/superviseur-robot/.idea/superviseur-robot.iml delete mode 100644 software/raspberry/superviseur-robot/.idea/vcs.xml delete mode 100644 software/raspberry/superviseur-robot/.idea/workspace.xml create mode 100644 software/raspberry/superviseur-robot/lib/base64/.gitignore create mode 100644 software/raspberry/superviseur-robot/lib/base64/LICENSE create mode 100644 software/raspberry/superviseur-robot/lib/base64/README.md create mode 100644 software/raspberry/superviseur-robot/lib/base64/base64.cpp create mode 100644 software/raspberry/superviseur-robot/lib/base64/base64.h create mode 100755 software/raspberry/superviseur-robot/lib/base64/compile-and-run-test create mode 100644 software/raspberry/superviseur-robot/lib/base64/test.cpp diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index ee202d8..0000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "configurations": [ - { - "name": "Linux", - "includePath": [ - "${workspaceFolder}/**" - ], - "defines": [], - "compilerPath": "/usr/bin/clang", - "cStandard": "c11", - "cppStandard": "c++17", - "intelliSenseMode": "clang-x64" - } - ], - "version": 4 -} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 29327bf..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [ - { - "taskName": "Compile on raspberry", - "command": "rsync -az '${file}' 10.105.1.6:~ && ssh server.example.org 'chmod +x ./${fileBasename}; ./${fileBasename}'", - "type": "shell", - "group": { - "kind": "build", - "isDefault": true - } - } - ] -} \ No newline at end of file diff --git a/software/monitor/monitor/Client.cs b/software/monitor/monitor/Client.cs index 48bb9c9..b6afe8a 100644 --- a/software/monitor/monitor/Client.cs +++ b/software/monitor/monitor/Client.cs @@ -23,6 +23,8 @@ using System; using System.Net.Sockets; using System.Text; +using System.Threading; + namespace monitor { ///

@@ -66,21 +68,26 @@ namespace monitor /// private static byte[] receiveBuffer; - private static int initialReceiveBufferIndex = 0; + //private static int initialReceiveBufferIndex = 0; /// /// String containing received message from tcp server /// private static StringBuilder message = new StringBuilder(); - private static int newLength = 1; - private static int packetCounter = 0; + //private static int newLength = 1; + //private static int packetCounter = 0; /// /// Callback to send received message to upper level /// - public delegate void ReadEvent(string msg, byte[] buffer); + public delegate void ReadEvent(string msg); public static ReadEvent readEvent = null; + /// + /// Thread used in reception + /// + private static Thread readThread; + /// /// Open connection to server "host", on default port number. /// @@ -114,7 +121,12 @@ namespace monitor // received data are stored in buffer // Next reading will be done in ReadCallback method - stream.BeginRead(buffer, 0, newLength, new AsyncCallback(ReadCallback), message); + stream.BeginRead(buffer, 0, 1, new AsyncCallback(ReadCallback), message); + + // Start reading thread + //message.Clear(); + //readThread = new Thread(new ThreadStart(ReadCallback)); + //readThread.Start(); } catch (ArgumentNullException e) { @@ -144,19 +156,142 @@ namespace monitor if (client != null) client.Close(); } + /// + /// Callback call by stream.BeginRead after reception of newLength data + /// + //private static void ReadCallback() + //{ + // char character; + // int data; + // byte[] buffer=new byte[4096]; + // int lengthRead; + + // while (client.Connected) + // { + // try + // { + // //data = stream.ReadByte(); + // lengthRead = stream.Read(buffer, 0, buffer.Length); + // } + // catch (ObjectDisposedException) + // { + // Console.WriteLine("Connection to server dropped (object disposed)!"); + // return; + // } + // catch (System.IO.IOException) + // { + // Console.WriteLine("Connection to server dropped (other error)"); + // return; + // } + + // if (lengthRead > 0) // a data was read + // { + // //character = (char)data; + // var str = System.Text.Encoding.Default.GetString(buffer); + // int indexOf = str.IndexOf('\n'); + + // //if (character != '\n') + // if (indexOf == -1) // \n doesn't exists + // { + // message.Append(str); + + // //if (receiveBuffer == null) receiveBuffer = new byte[1]; + // //else Array.Resize(ref receiveBuffer, receiveBuffer.Length + 1); // resize currrent buffer + + // //receiveBuffer[receiveBuffer.Length - 1] = (byte)data; + // } + // else // end of string found + // { + // message.Append((str.Substring(0,indexOf))); + // readEvent?.Invoke(message.ToString(), receiveBuffer); + + // message.Clear(); + // receiveBuffer = null; + // } + // } + // } + //} + /// /// Callback call by stream.BeginRead after reception of newLength data /// /// Not sure of what is it, but needed for terminate reading + //private static void ReadCallback(IAsyncResult ar) + //{ + // if (client.Connected) + // { + // int bytesRead; + + // try + // { + // // Termintae read operation, and get number of byte stored in buffer + // bytesRead = stream.EndRead(ar); + // } + // catch (ObjectDisposedException e) + // { + // Console.WriteLine("Connection to server dropped: " + e.ToString()); + // return; + // } + + // newLength = 1; + + // // if number of byte read is not 0, concatenate string and buffer + // if (bytesRead > 0) + // { + // packetCounter++; + + // if (packetCounter >= 3) + // { + // //Console.WriteLine("Supplementary packet " + packetCounter); + // } + + // // Append new data to current string (expecting data are ascii) + // message.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead)); + + // // Similarly, append received bytes to current buffer + // if (receiveBuffer == null) receiveBuffer = new byte[bytesRead]; + // else Array.Resize(ref receiveBuffer, initialReceiveBufferIndex + bytesRead); // resize currrent buffer + + // System.Buffer.BlockCopy(buffer, 0, receiveBuffer, initialReceiveBufferIndex, bytesRead); // and add received data + // initialReceiveBufferIndex = receiveBuffer.Length; // move last index of current buffer + // } + + // // if it remains received data, prepare for a new reading (get another buffer to append to current one) + // if (client.Available > 0) + // { + // newLength = client.Available; + // if (newLength > BufferMaxSize) newLength = BufferMaxSize; + // else newLength = client.Available; + // } + // else + // { + // // no more data to read, buffer and string can be send to upper level + // readEvent?.Invoke(message.ToString(), receiveBuffer); + + // message.Clear(); + // receiveBuffer = null; + // initialReceiveBufferIndex = 0; + // packetCounter = 0; + // } + + // // Prepare for reading new data + // if (newLength> BufferMaxSize) newLength = BufferMaxSize; + // if (newLength <= 0) newLength = 1; + // stream.BeginRead(buffer, 0, newLength, new AsyncCallback(ReadCallback), message); + // } + //} + private static void ReadCallback(IAsyncResult ar) { + int newLength = 1; + if (client.Connected) { int bytesRead; try { - // Termintae read operation, and get number of byte stored in buffer + // Terminate read operation, and get number of byte stored in buffer bytesRead = stream.EndRead(ar); } catch (ObjectDisposedException e) @@ -165,27 +300,13 @@ namespace monitor return; } - newLength = 1; + //newLength = 1; // if number of byte read is not 0, concatenate string and buffer if (bytesRead > 0) { - packetCounter++; - - if (packetCounter >= 3) - { - //Console.WriteLine("Supplementary packet " + packetCounter); - } - // Append new data to current string (expecting data are ascii) message.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead)); - - // Similarly, append received bytes to current buffer - if (receiveBuffer == null) receiveBuffer = new byte[bytesRead]; - else Array.Resize(ref receiveBuffer, initialReceiveBufferIndex + bytesRead); // resize currrent buffer - - System.Buffer.BlockCopy(buffer, 0, receiveBuffer, initialReceiveBufferIndex, bytesRead); // and add received data - initialReceiveBufferIndex = receiveBuffer.Length; // move last index of current buffer } // if it remains received data, prepare for a new reading (get another buffer to append to current one) @@ -198,12 +319,9 @@ namespace monitor else { // no more data to read, buffer and string can be send to upper level - readEvent?.Invoke(message.ToString(), receiveBuffer); + readEvent?.Invoke(message.ToString()); message.Clear(); - receiveBuffer = null; - initialReceiveBufferIndex = 0; - packetCounter = 0; } // Prepare for reading new data diff --git a/software/monitor/monitor/CommandManager.cs b/software/monitor/monitor/CommandManager.cs index 803e229..03efac1 100644 --- a/software/monitor/monitor/CommandManager.cs +++ b/software/monitor/monitor/CommandManager.cs @@ -33,7 +33,7 @@ namespace monitor /// /// Callback for sending received data to upper level /// - public delegate void CommandReceivedEvent(string msg, byte[] buffer); + public delegate void CommandReceivedEvent(string msg); public CommandReceivedEvent commandReceivedEvent = null; /// @@ -122,7 +122,7 @@ namespace monitor /// /// Message received from server /// Raw buffer reived from server - private void OnMessageReception(string message, byte[] buffer) + private void OnMessageReception(string message) { waitTimer.Stop(); // Stop timeout stopwatch @@ -144,7 +144,7 @@ namespace monitor waitForAcknowledge = false; - this.commandReceivedEvent?.Invoke(message, buffer); + this.commandReceivedEvent?.Invoke(message); } } @@ -158,7 +158,7 @@ namespace monitor messageReceived = null; // set buffer and message as null to indicate that no message was received // and call to OnMessagereception is due to timeout - OnMessageReception(messageReceived, null); + OnMessageReception(messageReceived); } /// diff --git a/software/monitor/monitor/DestijlCommandManager.cs b/software/monitor/monitor/DestijlCommandManager.cs index 2f85469..3257eb8 100644 --- a/software/monitor/monitor/DestijlCommandManager.cs +++ b/software/monitor/monitor/DestijlCommandManager.cs @@ -20,6 +20,7 @@ // along with this program. If not, see . using System; +using System.Globalization; namespace monitor { @@ -28,47 +29,84 @@ namespace monitor /// public static class DestijlCommandList { - public const string HeaderMtsComDmb = "COM"; - public const string HeaderMtsDmbOrder = "DMB"; - public const string HeaderMtsCamera = "CAM"; - public const string HeaderMtsMessage = "MSG"; + public const string ANSWER_ACK = "AACK"; + public const string ANSWER_NACK = "ANAK"; + public const string ANSWER_COM_ERROR = "ACER"; + public const string ANSWER_TIMEOUT = "ATIM"; + public const string ANSWER_CMD_REJECTED = "ACRJ"; + public const string MESSAGE = "MSSG"; + public const string CAMERA_OPEN = "COPN"; + public const string CAMERA_CLOSE = "CCLS"; + public const string CAMERA_IMAGE = "CIMG"; + public const string CAMERA_ARENA_ASK = "CASA"; + public const string CAMERA_ARENA_INFIRM = "CAIN"; + public const string CAMERA_ARENA_CONFIRM = "CACO"; + public const string CAMERA_POSITION_COMPUTE = "CPCO"; + public const string CAMERA_POSITION_STOP = "CPST"; + public const string CAMERA_POSITION = "CPOS"; + public const string ROBOT_COM_OPEN = "ROPN"; + public const string ROBOT_COM_CLOSE = "RCLS"; + public const string ROBOT_PING = "RPIN"; + public const string ROBOT_RESET = "RRST"; + public const string ROBOT_START_WITHOUT_WD = "RSOW"; + public const string ROBOT_START_WITH_WD = "RSWW"; + public const string ROBOT_RELOAD_WD = "RLDW"; + public const string ROBOT_MOVE = "RMOV"; + public const string ROBOT_TURN = "RTRN"; + public const string ROBOT_GO_FORWARD = "RGFW"; + public const string ROBOT_GO_BACKWARD = "RGBW"; + public const string ROBOT_GO_LEFT = "RGLF"; + public const string ROBOT_GO_RIGHT = "RGRI"; + public const string ROBOT_STOP = "RSTP"; + public const string ROBOT_POWEROFF = "RPOF"; + public const string ROBOT_BATTERY_LEVEL = "RBLV"; + public const string ROBOT_GET_BATTERY = "RGBT"; + public const string ROBOT_GET_STATE = "RGST"; + public const string ROBOT_CURRENT_STATE = "RCST"; - public const string DataComOpen = "o"; - public const string DataComClose = "C"; + public const char SEPARATOR_CHAR = ':'; - public const string DataCamOpen = "A"; - public const string DataCamClose = "I"; - public const string DataCamAskArena = "y"; - public const string DataCamArenaConfirm = "x"; - public const string DataCamInfirm = "z"; - public const string DataCamComputePosition = "p"; - public const string DataCamStopComputePosition = "s"; + //public const string HeaderMtsComDmb = "COM"; + //public const string HeaderMtsDmbOrder = "DMB"; + //public const string HeaderMtsCamera = "CAM"; + //public const string HeaderMtsMessage = "MSG"; - public const string HeaderStmAck = "ACK"; - public const string HeaderStmNoAck = "NAK"; - public const string HeaderStmLostDmb = "LCD"; - public const string HeaderStmImage = "IMG"; - public const string HeaderStmPos = "POS"; - public const string HeaderStmMes = "MSG"; - public const string HeaderStmBat = "BAT"; + //public const string DataComOpen = "o"; + //public const string DataComClose = "C"; + + //public const string DataCamOpen = "A"; + //public const string DataCamClose = "I"; + //public const string DataCamAskArena = "y"; + //public const string DataCamArenaConfirm = "x"; + //public const string DataCamInfirm = "z"; + //public const string DataCamComputePosition = "p"; + //public const string DataCamStopComputePosition = "s"; + + //public const string HeaderStmAck = "ACK"; + //public const string HeaderStmNoAck = "NAK"; + //public const string HeaderStmLostDmb = "LCD"; + //public const string HeaderStmImage = "IMG"; + //public const string HeaderStmPos = "POS"; + //public const string HeaderStmMes = "MSG"; + //public const string HeaderStmBat = "BAT"; } /// /// Commands used for robot messages /// - public static class RobotCommandList - { - public const string RobotPing = "p"; - public const string RobotReset = "r"; - public const string RobotStartWithoutWatchdog = "u"; - public const string RobotStartWithWatchdog = "W"; - public const string RobotGetBattery = "v"; - public const string RobotGetBusyState = "b"; - public const string RobotMove = "M"; - public const string RobotTurn = "T"; - public const string RobotGetVersion = "V"; - public const string RobotPowerOff = "z"; - } + //public static class RobotCommandList + //{ + // public const string RobotPing = "p"; + // public const string RobotReset = "r"; + // public const string RobotStartWithoutWatchdog = "u"; + // public const string RobotStartWithWatchdog = "W"; + // public const string RobotGetBattery = "v"; + // public const string RobotGetBusyState = "b"; + // public const string RobotMove = "M"; + // public const string RobotTurn = "T"; + // public const string RobotGetVersion = "V"; + // public const string RobotPowerOff = "z"; + //} /// /// Specialization class for command manager, which implemnent destijl protocol between monitor and server @@ -93,7 +131,7 @@ namespace monitor /// /// Callback for sending received data to application level /// - public delegate void CommandReceivedEvent(string header, string data, byte[] buffer); + public delegate void CommandReceivedEvent(string header, string data); public CommandReceivedEvent commandReceivedEvent = null; /// @@ -114,6 +152,34 @@ namespace monitor CommunicationLostWithServer } + public struct Point { + public double x; + public double y; + } + + public class Position { + public int robotID; + public double angle; + public Point centre; + public Point direction; + + public Position() { + robotID = 0; + angle = 0.0; + centre.x = 0.0; + centre.y = 0.0; + direction.x = 0.0; + direction.y = 0.0; + } + + public override string ToString() { + string s = "ID: " + robotID + ", Angle: " + angle + + ", Centre (x: " + centre.x + ", y: " + centre.y + + "), Direction (x: " + direction.x + ", y: " + direction.y + ")"; + return s; + } + } + /// /// Initializes a new instance of the class. /// @@ -138,10 +204,13 @@ namespace monitor /// /// String containing received message /// Raw buffer to be used when data are not in ascii format (image for example) - private void OnCommandReceived(string msg, byte[] buffer) + private void OnCommandReceived(string msg) { - // Firstly, split message in (at least) two part : header, and data - string[] msgs = msg.Split(':'); + // Firstly, remove ending \n and everything after + string[] msgsCarriageReturn = msg.Split('\n'); + + // Second, split message in (at least) two part : header, and data + string[] msgs = msgsCarriageReturn[0].Split(DestijlCommandList.SEPARATOR_CHAR); // If it exist at least on element in string array, it should be command header if (msgs.Length >= 1) receivedHeader = msgs[0]; @@ -152,7 +221,7 @@ namespace monitor else receivedData = null; // when split is done, provide data to application - this.commandReceivedEvent?.Invoke(receivedHeader, receivedData, buffer); + this.commandReceivedEvent?.Invoke(receivedHeader, receivedData); } /// @@ -193,7 +262,17 @@ namespace monitor /// Data part of the command private string CreateCommand(string header, string data) { - return header + ":" + data; + return header + DestijlCommandList.SEPARATOR_CHAR + data+"\n"; + } + + /// + /// Creates the command to send to server, based on header + /// + /// The command string + /// Header part of the command + private string CreateCommand(string header) + { + return header + DestijlCommandList.SEPARATOR_CHAR+"\n"; } /// @@ -215,9 +294,9 @@ namespace monitor if (answer != null) { // if command is not acknowledged, return Rejected - if (answer.ToUpper().Contains(DestijlCommandList.HeaderStmNoAck)) status = CommandStatus.Rejected; + if (answer.ToUpper().Contains(DestijlCommandList.ANSWER_NACK)) status = CommandStatus.Rejected; // if communication is lost with robot, return CommunicationLostWithRobot - else if (answer.ToUpper().Contains(DestijlCommandList.HeaderStmLostDmb)) status = CommandStatus.CommunicationLostWithRobot; + else if (answer.ToUpper().Contains(DestijlCommandList.ANSWER_TIMEOUT)) status = CommandStatus.CommunicationLostWithRobot; // if answer is empty, communication with robot is lost else if (answer.Length == 0) status = CommandStatus.CommunicationLostWithServer; //else status = CommandStatus.InvalidAnswer; @@ -237,7 +316,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsComDmb, DestijlCommandList.DataComOpen), + CreateCommand(DestijlCommandList.ROBOT_COM_OPEN), out answer, this.timeout); @@ -254,7 +333,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsComDmb, DestijlCommandList.DataComClose), + CreateCommand(DestijlCommandList.ROBOT_COM_CLOSE), out answer, this.timeout); @@ -271,7 +350,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotPing), + CreateCommand(DestijlCommandList.ROBOT_PING), out answer, this.timeout); @@ -288,7 +367,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotReset), + CreateCommand(DestijlCommandList.ROBOT_RESET), out answer, 0); @@ -305,7 +384,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotStartWithWatchdog), + CreateCommand(DestijlCommandList.ROBOT_START_WITH_WD), out answer, this.timeout); @@ -322,7 +401,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotStartWithoutWatchdog), + CreateCommand(DestijlCommandList.ROBOT_START_WITHOUT_WD), out answer, this.timeout); @@ -340,7 +419,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotMove + "=" + distance), + CreateCommand(DestijlCommandList.ROBOT_MOVE, Convert.ToString(distance)), out answer, 0); @@ -358,7 +437,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotTurn + "=" + angle), + CreateCommand(DestijlCommandList.ROBOT_TURN, Convert.ToString(angle)), out answer, 0); @@ -375,48 +454,13 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotGetBattery), + CreateCommand(DestijlCommandList.ROBOT_GET_BATTERY), out answer, 0); return DecodeStatus(localStatus, answer); } - /// - /// Request robot firmware version - /// - /// Command status (see DecodeStatus) - /// todo - public CommandStatus RobotGetVersion(out string version) - { - CommandManager.CommandManagerStatus localStatus; - CommandStatus status = CommandStatus.Success; - version = ""; - - string answer; - - localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotGetVersion), - out answer, - this.timeout); - - if (localStatus == CommandManager.CommandManagerStatus.AnswerReceived) - { - string[] msg = answer.Split(':'); - - if (msg.Length > 1) - { - version = msg[1]; - } - } - else if (localStatus == CommandManager.CommandManagerStatus.Timeout) - { - status = CommandStatus.CommunicationLostWithServer; - } - - return status; - } - /// /// Power off robot /// @@ -427,7 +471,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotPowerOff), + CreateCommand(DestijlCommandList.ROBOT_POWEROFF), out answer, 0); @@ -444,7 +488,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamOpen), + CreateCommand(DestijlCommandList.CAMERA_OPEN), out answer, this.timeout); @@ -461,7 +505,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamClose), + CreateCommand(DestijlCommandList.CAMERA_CLOSE), out answer, 0); @@ -478,7 +522,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamAskArena), + CreateCommand(DestijlCommandList.CAMERA_ARENA_ASK), out answer, 0); @@ -495,7 +539,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamArenaConfirm), + CreateCommand(DestijlCommandList.CAMERA_ARENA_CONFIRM), out answer, 0); @@ -512,7 +556,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamInfirm), + CreateCommand(DestijlCommandList.CAMERA_ARENA_INFIRM), out answer, 0); @@ -529,7 +573,7 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamComputePosition), + CreateCommand(DestijlCommandList.CAMERA_POSITION_COMPUTE), out answer, 0); @@ -546,11 +590,86 @@ namespace monitor string answer; localStatus = commandManager.SendCommand( - CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamStopComputePosition), + CreateCommand(DestijlCommandList.CAMERA_POSITION_STOP), out answer, 0); return DecodeStatus(localStatus, answer); } + + public static Position DecodePosition(string data) { + Position pos = new Position(); + + pos.robotID = 0; + pos.angle = 0.0; + pos.centre.x = 0.0; + pos.centre.y=0.0; + pos.direction.x = 0.0; + pos.direction.y = 0.0; + + string[] parts = data.Split(';'); + + //for (int i = 0; i < parts.Length; i++) { + // Console.WriteLine(parts[i]); + //} + + NumberFormatInfo provider = new NumberFormatInfo(); + provider.NumberDecimalSeparator = "."; + provider.NumberGroupSeparator = ","; + provider.NumberGroupSizes = new int[] { 3 }; + + if (parts.Length == 6) { + pos.robotID = Convert.ToInt32(parts[0]); + + try + { + pos.angle = Convert.ToDouble(parts[1]); + } catch (FormatException) + { + pos.angle = Convert.ToDouble(parts[1],provider); + } + + try + { + pos.centre.x = Convert.ToDouble(parts[2]); + } catch (FormatException) + { + pos.centre.x = Convert.ToDouble(parts[2], provider); + } + + try + { + pos.centre.y = Convert.ToDouble(parts[3]); + } + catch (FormatException) + { + pos.centre.y = Convert.ToDouble(parts[3], provider); + } + + try + { + pos.direction.x = Convert.ToDouble(parts[4]); + } + catch (FormatException) + { + pos.direction.x = Convert.ToDouble(parts[4], provider); + } + + try + { + pos.direction.y = Convert.ToDouble(parts[5]); + } + catch (FormatException) + { + pos.direction.y = Convert.ToDouble(parts[5], provider); + } + + } else { + // misformatted data, return 0 filled position + Console.WriteLine("Misformated position"); + } + + return pos; + } } } diff --git a/software/monitor/monitor/MonitorUI.cs b/software/monitor/monitor/MonitorUI.cs index d042c15..0835562 100644 --- a/software/monitor/monitor/MonitorUI.cs +++ b/software/monitor/monitor/MonitorUI.cs @@ -23,6 +23,7 @@ using System; using Gtk; using Gdk; +using Cairo; using monitor; @@ -41,6 +42,11 @@ public partial class MainWindow : Gtk.Window /// private Pixbuf drawingareaCameraPixbuf; + /// + /// Position used for displaying position + /// + private DestijlCommandManager.Position position=new DestijlCommandManager.Position(); + /// /// List of availble state for the application /// @@ -200,8 +206,8 @@ public partial class MainWindow : Gtk.Window a.RetVal = true; } - private byte[] imageComplete; - private byte[] imageInProgress; + //private byte[] imageComplete; + //private byte[] imageInProgress; /// /// Callback called when new message is received from server @@ -209,17 +215,20 @@ public partial class MainWindow : Gtk.Window /// Header of message /// Data of message /// Raw buffer corresponding of received message - public void OnCommandReceivedEvent(string header, string data, byte[] buffer) + public void OnCommandReceivedEvent(string header, string data) { - if (buffer==null) + if (header == null) { // we have lost server ChangeState(SystemState.NotConnected); - MessagePopup(MessageType.Error, + Gtk.Application.Invoke(delegate + { + MessagePopup(MessageType.Error, ButtonsType.Ok, "Server lost", "Server is down: disconnecting"); - cmdManager.Close(); + cmdManager.Close(); + }); } // if we have received a valid message @@ -228,75 +237,104 @@ public partial class MainWindow : Gtk.Window #if DEBUG // print message content if (header.Length > 4) - Console.WriteLine("Bad header(" + buffer.Length + ")"); - else - Console.WriteLine("Received header (" + header.Length + "): " + header); + Console.WriteLine("Bad header(" + header.Length + ")"); + //else + // Console.WriteLine("Received header (" + header.Length + "): " + header); //if (header.ToUpper() != DestijlCommandList.HeaderStmImage) //{ // if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data); //} #endif // Image management - if (header == DestijlCommandList.HeaderStmImage) - { - imageComplete = imageInProgress; - imageInProgress = buffer; - } - else - { - if (imageInProgress == null) imageInProgress = buffer; - else - { - Array.Resize(ref imageInProgress, imageInProgress.Length + buffer.Length); - System.Buffer.BlockCopy(buffer, 0, imageInProgress, imageInProgress.Length - buffer.Length, buffer.Length); - } - } + //if (header == DestijlCommandList.CAMERA_IMAGE) + //{ + // imageComplete = imageInProgress; + // //TODO: Decoder le base64 pour recuperer le JPG + // imageInProgress = buffer; + //} + //else + //{ + // if (imageInProgress == null) imageInProgress = buffer; + // else + // { + // Array.Resize(ref imageInProgress, imageInProgress.Length + buffer.Length); + // System.Buffer.BlockCopy(buffer, 0, imageInProgress, imageInProgress.Length - buffer.Length, buffer.Length); + // } + //} // depending on message received (based on header) // launch correponding action - if (header.ToUpper() == DestijlCommandList.HeaderStmBat) + header = header.ToUpper(); + + if (header == DestijlCommandList.ROBOT_BATTERY_LEVEL) { + string batLevel = ""; + switch (data[0]) { case '2': - labelBatteryLevel.Text = "High"; + batLevel = "High"; break; case '1': - labelBatteryLevel.Text = "Low"; + batLevel = "Low"; break; case '0': - labelBatteryLevel.Text = "Empty"; + batLevel = "Empty"; break; default: - labelBatteryLevel.Text = "Invalid value"; + batLevel = "Invalid value"; break; } + + Gtk.Application.Invoke(delegate + { + labelBatteryLevel.Text = batLevel; + }); } - else if (header.ToUpper() == DestijlCommandList.HeaderStmImage) + else if (header == DestijlCommandList.CAMERA_IMAGE) { // if message is an image, convert it to a pixbuf // that can be displayed - if (imageComplete != null) - { - byte[] image = new byte[imageComplete.Length - 4]; - System.Buffer.BlockCopy(imageComplete, 4, image, 0, image.Length); + //if (imageComplete != null) + //{ + //TODO: Decoder le base64 et convertir en JPG + byte[] image = Convert.FromBase64String(data); + //byte[] image = new byte[imageComplete.Length - 4]; + //System.Buffer.BlockCopy(imageComplete, 4, image, 0, image.Length); - imageReceivedCounter++; - try + imageReceivedCounter++; + + try + { + drawingareaCameraPixbuf = new Pixbuf(image); + + Gtk.Application.Invoke(delegate { - drawingareaCameraPixbuf = new Pixbuf(image); drawingAreaCamera.QueueDraw(); - } - catch (GLib.GException) - { - badImageReceivedCounter++; -#if DEBUG - Console.WriteLine("Bad Image: " + badImageReceivedCounter + - " / " + imageReceivedCounter + - " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)"); -#endif - } + }); } + catch (GLib.GException) + { + badImageReceivedCounter++; +#if DEBUG + Console.WriteLine("Bad Image: " + badImageReceivedCounter + + " / " + imageReceivedCounter + + " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)"); +#endif + } + //} + } + else if (header == DestijlCommandList.CAMERA_POSITION) + { + //Console.WriteLine("Pos data: " + data); + + position = DestijlCommandManager.DecodePosition(data); + //Console.WriteLine("decoded position: " + position.ToString()); + + Gtk.Application.Invoke(delegate + { + drawingAreaCamera.QueueDraw(); + }); } } } @@ -417,10 +455,10 @@ public partial class MainWindow : Gtk.Window DestijlCommandManager.CommandStatus status; //if robot is not activated - if (buttonRobotActivation.Label == "Activate") + if (buttonRobotActivation.Label == "Activate") { // if a startup with watchdog is requested - if (radioButtonWithWatchdog.Active) + if (radioButtonWithWatchdog.Active) { status = cmdManager.RobotStartWithWatchdog(); } @@ -557,9 +595,7 @@ public partial class MainWindow : Gtk.Window { if (cmdManager.CameraClose() != DestijlCommandManager.CommandStatus.Success) { - MessagePopup(MessageType.Error, - ButtonsType.Ok, "Error", - "Error when closing camera: bad answer for supervisor or timeout"); + Console.WriteLine("Error when closing camera: bad answer for supervisor or timeout"); } } else // camera is not active, switch it on @@ -569,10 +605,8 @@ public partial class MainWindow : Gtk.Window if (cmdManager.CameraOpen() != DestijlCommandManager.CommandStatus.Success) { - MessagePopup(MessageType.Error, - ButtonsType.Ok, "Error", - "Error when opening camera: bad answer for supervisor or timeout"); - checkButtonCameraOn.Active = false; + Console.WriteLine("Error when opening camera: bad answer for supervisor or timeout"); + //checkButtonCameraOn.Active = false; } } } @@ -589,20 +623,16 @@ public partial class MainWindow : Gtk.Window { if (cmdManager.CameraStopComputePosition() != DestijlCommandManager.CommandStatus.Success) { - MessagePopup(MessageType.Error, - ButtonsType.Ok, "Error", - "Error when stopping position reception: bad answer for supervisor or timeout"); + Console.WriteLine("Error when stopping position reception: bad answer for supervisor or timeout"); } } else // start reception of robot position { if (cmdManager.CameraComputePosition() != DestijlCommandManager.CommandStatus.Success) { - MessagePopup(MessageType.Error, - ButtonsType.Ok, "Error", - "Error when starting getting robot position: bad answer for supervisor or timeout"); + Console.WriteLine("Error when starting getting robot position: bad answer for supervisor or timeout"); - checkButtonRobotPosition.Active = false; + //checkButtonRobotPosition.Active = false; } } } @@ -657,6 +687,47 @@ public partial class MainWindow : Gtk.Window (areaHeight - displayPixbuf.Height) / 2, displayPixbuf.Width, displayPixbuf.Height, RgbDither.Normal, 0, 0); + + if (checkButtonRobotPosition.Active) { + Cairo.Context cr = Gdk.CairoHelper.Create(area.GdkWindow); + Cairo.Color textFontColor = new Cairo.Color(0.8, 0, 0); + + cr.SelectFontFace("Cantarell", FontSlant.Normal, FontWeight.Bold); + cr.SetSourceColor(textFontColor); + cr.SetFontSize(16); + + double space = 0.0; + string text = "Direction (" + position.direction.x.ToString("0.##") + " ; " + position.direction.y.ToString("0.##") +")"; + TextExtents te = cr.TextExtents(text); + cr.MoveTo(areaWidth - te.Width-5, + areaHeight - te.Height -5); + space = te.Height; + cr.ShowText(text); + + text = "Centre (" + position.centre.x.ToString("0.##") + " ; " + position.centre.y.ToString("0.##") + ")"; + te = cr.TextExtents(text); + cr.MoveTo(areaWidth - te.Width - 5, + areaHeight - te.Height - 5 - space-5); + space = space+ te.Height+5; + cr.ShowText(text); + + text = "Angle: " + position.angle.ToString("0.##"); + te = cr.TextExtents(text); + cr.MoveTo(areaWidth - te.Width - 5, + areaHeight - te.Height - 5 - space - 5); + space = space+ te.Height+5; + cr.ShowText(text); + + text = "ID: " + position.robotID; + te = cr.TextExtents(text); + cr.MoveTo(areaWidth - te.Width - 5, + areaHeight - te.Height - 5 - space-5); + + cr.ShowText(text); + + ((IDisposable)cr.GetTarget()).Dispose(); + ((IDisposable)cr).Dispose(); + } } /// diff --git a/software/monitor/monitor/monitor b/software/monitor/monitor/monitor index d65f28ccb20963cd6bfb8e2953b14a070e75a2b9..fe4e2743dfa7e2b83d2925399e2192d89f31c66b 100755 GIT binary patch delta 24038 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 P%}4dymES7|oBaO|hC-zr delta 21098 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 Zr_re@?$Uo2a>49J?YoWtFm7xQ{Wldx0-yi@ diff --git a/software/raspberry/superviseur-robot/.dep.inc b/software/raspberry/superviseur-robot/.dep.inc deleted file mode 100644 index 38ba445..0000000 --- a/software/raspberry/superviseur-robot/.dep.inc +++ /dev/null @@ -1,5 +0,0 @@ -# This code depends on make tool being used -DEPFILES=$(wildcard $(addsuffix .d, ${OBJECTFILES} ${TESTOBJECTFILES})) -ifneq (${DEPFILES},) -include ${DEPFILES} -endif diff --git a/software/raspberry/superviseur-robot/.idea/.name b/software/raspberry/superviseur-robot/.idea/.name deleted file mode 100644 index 02eef87..0000000 --- a/software/raspberry/superviseur-robot/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -ProjDestijl \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/.idea/codeStyles/Project.xml b/software/raspberry/superviseur-robot/.idea/codeStyles/Project.xml deleted file mode 100644 index 30aa626..0000000 --- a/software/raspberry/superviseur-robot/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/.idea/misc.xml b/software/raspberry/superviseur-robot/.idea/misc.xml deleted file mode 100644 index 8822db8..0000000 --- a/software/raspberry/superviseur-robot/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/.idea/modules.xml b/software/raspberry/superviseur-robot/.idea/modules.xml deleted file mode 100644 index 7a92ef3..0000000 --- a/software/raspberry/superviseur-robot/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/.idea/superviseur-robot.iml b/software/raspberry/superviseur-robot/.idea/superviseur-robot.iml deleted file mode 100644 index f08604b..0000000 --- a/software/raspberry/superviseur-robot/.idea/superviseur-robot.iml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/.idea/vcs.xml b/software/raspberry/superviseur-robot/.idea/vcs.xml deleted file mode 100644 index c2365ab..0000000 --- a/software/raspberry/superviseur-robot/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/software/raspberry/superviseur-robot/.idea/workspace.xml b/software/raspberry/superviseur-robot/.idea/workspace.xml deleted file mode 100644 index 2579f0f..0000000 --- a/software/raspberry/superviseur-robot/.idea/workspace.xml +++ /dev/null @@ -1,864 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - DEFINITION_ORDER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Y5m%&og(Q$ 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�aq>Gmu_{l-<;P7omTtV10aZw~ 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

p(5?uCyF$ujB-i@r+w%&Ed*dnoc5yA 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 z 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. + */ + +#include "camera.h" +#include "img.h" + +using namespace cv; + +void Camera::setSize(int size) { + this->size = size; + switch (size){ + case xs: + this->width = 480; + this->height = 360; + break; + case sm: + this->width = 640; + this->height = 480; + break; + case md: + this->width = 1024; + this->height = 768; + break; + case lg: + this->width = 1280; + this->height = 960; + break; + default: + this->width = 480; + this->height = 360; + + } +} + + +int Camera::open_camera() { + this->cap.open(0); +} + +Camera::Camera(int size) { + this->setSize(size); + this->cap.set(CV_CAP_PROP_FORMAT, CV_8UC3); + this->cap.set(CV_CAP_PROP_FRAME_WIDTH,width); + this->cap.set(CV_CAP_PROP_FRAME_HEIGHT,height); +} + +int Camera::close_camera() { + cap.release(); + return 0; +} + +Img Camera::grab_image() { + ImageMat frame; + cap >> frame; + Img capture = Img(frame); + return capture; +} + + +bool Camera::isOpen() { + return cap.isOpened(); +} + +int Camera::getWidth() const { + return width; +} + +int Camera::getHeight() const { + return height; +} + + diff --git a/software/raspberry/superviseur-robot/lib/camera.h b/software/raspberry/superviseur-robot/lib/camera.h new file mode 100644 index 0000000..3857657 --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/camera.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __CAMERA_H__ +#define __CAMERA_H__ + +#include +#include + +#include "img.h" + +enum captureSize {xs, sm, md, lg}; + +class Camera { +public: + + Camera(int size); + + int open_camera(); + + int getWidth() const; + + int getHeight() const; + + bool isOpen(); + void setSize(int size); + + int close_camera(); + Img grab_image(); + +private: + cv::VideoCapture cap; + int size = sm; + int width; + int height; +}; + +#endif //__CAMERA_H__ diff --git a/software/raspberry/superviseur-robot/lib/comgui.cpp b/software/raspberry/superviseur-robot/lib/comgui.cpp new file mode 100644 index 0000000..0ad3141 --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/comgui.cpp @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "comgui.h" +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +/* + * Constants used for sending commands to gui + */ +const string LABEL_GUI_ANGULAR_POSITION = "AngularPosition"; +const string LABEL_GUI_ANGULAR_SPEED = "AngularSpeed"; +const string LABEL_GUI_BATTERY_LEVEL = "Battery"; +const string LABEL_GUI_LINEAR_SPEED = "LinearSpeed"; +const string LABEL_GUI_USER_PRESENCE = "User"; +const string LABEL_GUI_BETA_ANGLE = "Beta"; +const string LABEL_GUI_TORQUE = "Torque"; +const string LABEL_GUI_EMERGENCY_STOP = "Emergency"; +const string LABEL_GUI_LOG = "Log"; + +/** + * Create a server and open a socket over TCP + * + * @param port Port used for communication + * @return Socket number + * @throw std::runtime_error if it fails + */ +int ComGui::Open(int port) { + struct sockaddr_in server; + + socketFD = socket(AF_INET, SOCK_STREAM, 0); + if (socketFD < 0) { + throw std::runtime_error{"ComGui::Open : Can not create socket"}; + } + + server.sin_addr.s_addr = INADDR_ANY; + server.sin_family = AF_INET; + server.sin_port = htons(port); + + if (bind(socketFD, (struct sockaddr *) &server, sizeof (server)) < 0) { + throw std::runtime_error{"ComGui::Open : Can not bind socket on port " + std::to_string(port)}; + } + + listen(socketFD, 1); + + return socketFD; +} + +/** + * Close socket and server + */ +void ComGui::Close() { + close(socketFD); + + socketFD = -1; +} + +/** + * Wait for a client to connect + * @return Client number + * @throw std::runtime_error if it fails + */ +int ComGui::AcceptClient() { + struct sockaddr_in client; + int c = sizeof (struct sockaddr_in); + + clientID = accept(socketFD, (struct sockaddr *) &client, (socklen_t*) & c); + + if (clientID < 0) + throw std::runtime_error { + "ComGui::AcceptClient : Accept failed" + }; + + return clientID; +} + +/** + * Send a message to GUI + * + * @param msg Message to send to GUI + * @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that. + * @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously + */ +void ComGui::Write(Message* msg) { + string *str; + + // Call user method before Write + Write_Pre(); + + /* Convert message to string to send to GUI */ + str = MessageToString(msg); + + //cout << "Message sent to GUI: " << str->c_str() << endl; + write(clientID, str->c_str(), str->length()); + + delete(str); + + // Call user method after write + Write_Post(); +} + +/** + * Method used internally to convert a message content to a string that can be sent over TCP + * @param msg Message to be converted + * @return A string, image of the message + */ +string *ComGui::MessageToString(Message *msg) { + int id; + string *str; + + if (msg != NULL) { + id = msg->GetID(); + + switch (id) { + case MESSAGE_ANGLE_POSITION: + str = new string(LABEL_GUI_ANGULAR_POSITION + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); + replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . + break; + case MESSAGE_ANGULAR_SPEED: + str = new string(LABEL_GUI_ANGULAR_SPEED + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); + replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . + break; + case MESSAGE_BATTERY: + str = new string(LABEL_GUI_BATTERY_LEVEL + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); + replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . + break; + case MESSAGE_BETA: + str = new string(LABEL_GUI_BETA_ANGLE + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); + replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . + break; + case MESSAGE_LINEAR_SPEED: + str = new string(LABEL_GUI_LINEAR_SPEED + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); + replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . + break; + case MESSAGE_TORQUE: + str = new string(LABEL_GUI_TORQUE + "=" + to_string(((MessageFloat*) msg)->GetValue()) + "\n"); + replace(str->begin(), str->end(), '.', ','); // Mono C# require float to have a , instead of a . + break; + case MESSAGE_EMERGENCY_STOP: + str = new string(LABEL_GUI_EMERGENCY_STOP + "="); + if (((MessageBool*) msg)->GetState()) + str->append("True\n"); + else + str->append("False\n"); + break; + case MESSAGE_USER_PRESENCE: + str = new string(LABEL_GUI_USER_PRESENCE + "="); + if (((MessageBool*) msg)->GetState()) + str->append("True\n"); + else + str->append("False\n"); + break; + case MESSAGE_EMPTY: + str = new string(""); //empty string + break; + case MESSAGE_LOG: + str = new string(LABEL_GUI_LOG + "=" + ((MessageString*) msg)->GetString() + "\n"); + break; + default: + str = new string(""); //empty string + break; + } + } + + return str; +} diff --git a/software/raspberry/superviseur-robot/lib/comgui.h b/software/raspberry/superviseur-robot/lib/comgui.h new file mode 100644 index 0000000..351a0d7 --- /dev/null +++ b/software/raspberry/superviseur-robot/lib/comgui.h @@ -0,0 +1,104 @@ + /* + * Copyright (C) 2018 dimercur + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __COMGUI_H__ +#define __COMGUI_H__ + +#include "messages.h" +#include + +using namespace std; + +/** + * Class used for generating a server and communicating through it with GUI + * + * @brief Communication class with GUI (server) + * + */ +class ComGui { +public: + /** + * Constructor + */ + ComGui() {} + + /** + * Destructor + */ + virtual ~ComGui() {} + + /** + * Create a server and open a socket over TCP + * + * @param port Port used for communication + * @return Socket number + * @throw std::runtime_error if it fails + */ + int Open(int port); + + /** + * Close socket and server + */ + void Close(); + + /** + * Wait for a client to connect + * @return Client number + * @throw std::runtime_error if it fails + */ + int AcceptClient(); + + /** + * Send a message to GUI + * + * @param msg Message to send to GUI + * @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that. + * @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously + */ + void Write(Message* msg); + + /** + * Function called at beginning of Write method + * Use it to do some synchronization (call of mutex, for example) + */ + virtual void Write_Pre() {} + + /** + * Function called at end of Write method + * Use it to do some synchronization (release of mutex, for example) + */ + virtual void Write_Post() {} +protected: + /** + * Socket descriptor + */ + int socketFD = -1; + + /** + * Socket descriptor + */ + int clientID = -1; + + /** + * Method used internally to convert a message content to a string that can be sent over TCP + * @param msg Message to be converted + * @return A string, image of the message + */ + string *MessageToString(Message *msg); +}; + +#endif /* __COMGUI_H__ */ diff --git a/software/raspberry/superviseur-robot/lib/doc/html/annotated.html b/software/raspberry/superviseur-robot/lib/doc/html/annotated.html deleted file mode 100644 index b29162e..0000000 --- a/software/raspberry/superviseur-robot/lib/doc/html/annotated.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Bibliotheques TP RT: Class List - - - - - - - - - - - - - - -